在应用程序委托中,我在didRecieveLocalNotification
方法中编写了一些代码,首先确定触发了哪个本地通知,然后在单击通知横幅后重新打开应用程序后生成一个 UIAlert。
如果我的应用程序已关闭,local notification
仍然会收到,并且单击它确实会从其终止状态重新打开应用程序,但是该didRecieveLocalNotification
方法内部的代码根本不会触发。我什至无法让 NSLog 工作。
我能做些什么来解决这个问题?
在应用程序委托中,我在didRecieveLocalNotification
方法中编写了一些代码,首先确定触发了哪个本地通知,然后在单击通知横幅后重新打开应用程序后生成一个 UIAlert。
如果我的应用程序已关闭,local notification
仍然会收到,并且单击它确实会从其终止状态重新打开应用程序,但是该didRecieveLocalNotification
方法内部的代码根本不会触发。我什至无法让 NSLog 工作。
我能做些什么来解决这个问题?
您可以在 中获取此信息application:didFinishLaunchingWithOptions
,但前提是用户点击本地通知。
当系统传递本地通知时,可能会发生几件事,具体取决于应用程序状态和通知类型。如果应用程序不在最前面且不可见,则系统会显示警报消息、标记应用程序并播放声音(通知中指定的任何内容)。如果通知是警报并且用户点击操作按钮(或者,如果设备被锁定,则拖动打开操作滑块),则启动应用程序。在 application:didFinishLaunchingWithOptions: 方法中,应用程序委托可以使用 UIApplicationLaunchOptionsLocalNotificationKey 键从传入的选项字典中获取 UILocalNotification 对象。委托可以检查通知的属性,如果通知在其 userInfo 字典中包含自定义数据,它可以访问该数据并进行相应的处理。另一方面,如果本地通知仅标记应用程序图标,并且用户响应启动应用程序,则调用 application:didFinishLaunchingWithOptions: 方法,但选项字典中不包含 UILocalNotification 对象。
如果在系统传递通知时应用程序处于最前面且可见,则不会显示警报,不会标记图标,也不会播放声音。但是,如果应用程序委托实现了 application:didReceiveLocalNotification: ,则会调用它。UILocalNotification 实例被传递到此方法中,并且委托可以检查其属性或访问 userInfo 字典中的任何自定义数据。
当您的应用程序既没有运行也没有在后台运行时,您的通知将application:didFinishLaunchingWithOptions:
在您的应用程序委托中的方法中收到。
您可以使用以下代码访问通知对象。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
// Show Alert Here
}
}