如何获得已经发射的UILocalNotification

我在我的应用程序中实现UILocalNotification ,并按预期发送通知。 据我所知,通知是这样处理的:

  1. 当应用程序没有运行,并且用户点击通知时, applicationDidFinishLaunching通过applicationDidFinishLaunching方法中的选项接收通知。
  2. 当应用程序处于活动状态时,它通过didReceiveLocalNotification方法接收通知。
  3. 当应用程序在后台,并且用户单击通知时,它通过didReceiveLocalNotification方法接收通知。

但有一种情况我一直无法覆盖,那就是当一个通知被触发,应用程序在后台,而应用程序只是通过点击应用程序图标(而不是点击通知)来激活。 在这种情况下,没有可用的UILocalNotification 。 但是我仍然想知道自从上次激活通知以来,通知已经触发了,因为通知中有一些信息要在它的userInfo属性中执行。

目前我已经通过检查applicationDidBecomeActive中的徽章号是否为0来“解决”它,但是这只允许我向用户显示一般消息。 我宁愿能够知道什么通知导致徽章号码更新。 有什么办法可以做到这一点?

几天前我也有同样的问题。 幸运的是,有一个相当简单的方法来覆盖这种情况!

将通知保存在NSUserDefaults中,使用NSKeyedArchiver将其转换为NSData。 如果使用存储在通知的userInfo字典中的相同密钥,可能会更容易一些。

使用NSKeyedUnarchiver将其重新设置为UILocalNotification。 然后,您可以按照您认为合适的方式处理通知(或使用cancelLocalNotification方法将其删除)。

这里进一步解释。