用Xcode6运行会发现log提示:registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later
iOS 8 has changed notification registration in a non-backwards compatible way. While you need to support iOS 7 and 8 (and while apps built with the 8 SDK aren't accepted), you can check for the selectors you need and conditionally call them correctly for the running version.Here's a category on UIApplication that will hide this logic behind a clean interface for you that will work in both Xcode 5 and Xcode 6
解决方法:
// IOS8
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications];} else { // 原来的代码 [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];}原本在IOS7当中 判断PUSH是否打开的方法是:{
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];return (types & UIRemoteNotificationTypeAlert);}
在IOS8中,则要用下面的代码:
{
UIRemoteNotificationType types;if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {types = [[UIApplication sharedApplication] currentUserNotificationSettings].types;
} else { types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];}return (types & UIRemoteNotificationTypeAlert);
}