应用程序:didReceiveLocalNotification永远不会调用ios 8

是否有任何已知的问题:

application:didReceiveLocalNotification delegate 

在iOS 8上?

我的应用程序使用UILocalNotification创build本地通知。 当应用程序在后台我收到通知,当我点击通知横幅,它移动到我的应用程序。 但是这个方法:

 -(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

永远不会在iOS 8(Xcode 5.1.1)上调用,但在iOS 7或更早版本中运行良好。

PS我也testing过这个网站的项目: http : //www.appcoda.com/ios-programming-local-notification-tutorial/ ,它不适用于iOS 8。

使用这个iOS8

 - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler{ } 

实际上,iOS 8的解决scheme是向用户请求授权通知设置,否则委托方法-didReceiveLocalNotification:将永远不会被调用。 您可以通过将此代码添加到-didFinishLaunchingWithOptions:方法来执行此操作:

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; } 

这将向用户显示一个警告视图,要求显示通知的权限。 如果她接受,每当发出本地通知时,都会调用委托方法。

我遇到了同样的问题

您必须更改为使用以下代码:

 // register notification for push mechanism 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)]; } 

而不是原来的:

 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound]; 

我注意到了iOS8Beta5上的一样。 相同的代码在iOS8Beta4上正常工作。

编辑:如果答案build议,我们需要以不同的方式处理 – 那么为什么他们放弃支持两个testing版本之间。 如果iOS8Beta1构build以这种方式performance出来,这将是有意义的。 这就是为什么我觉得它是一个错误。