application:didReceiveLocalNotification从未在ios 8上调用过

时间:2014-08-11 13:20:35

标签: ios uilocalnotification ios8

是否存在任何已知问题:

application:didReceiveLocalNotification delegate
在iOS 8上

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

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

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

P.S。我还测试了这个站点的项目: http://www.appcoda.com/ios-programming-local-notification-tutorial/  它在iOS 8上不起作用。

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:5)

将此用于iOS8

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

}

答案 2 :(得分:4)

我遇到同样的问题......

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

// 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];

答案 3 :(得分:1)

我在iOS8Beta5上也注意到了这一点。相同的代码在iOS8Beta4上运行良好。

编辑: 如果答案显示,我们需要以不同方式处理它 - 那么为什么它们会在两个beta版本之间放弃支持。如果iOS8Beta1构建表现如此,那将是有意义的。这就是为什么我觉得它是一个错误。