重新安装应用程序后,UILocalNotification将触发

时间:2011-02-07 15:26:17

标签: iphone notifications repeat alarm uilocalnotification

我的应用程序使用UILocalNotification具有闹钟功能,效果很好。但是,如果用户卸载应用程序,然后重新安装它,他将立即收到所有“中间”通知。

我试过打电话:

[[UIApplication sharedApplication] cancelAllLocalNotifications];

如果它是第一次启动应用程序,但它没有帮助,因为甚至在应用程序之前收到通知:didFinishLaunchingWithOptions:被调用。

在4.0中,即使用户删除了应用程序,重复警报也是如此,但至少该错误是Apple在以后的版本中修复的。但是现在我坚持这个。有人有想法吗?

2 个答案:

答案 0 :(得分:15)

根据Apple的说法,这不是一个错误(我提交了一个错误报告)。系统会在24小时内保留已卸载应用程序的UILocalNotifications,以防用户意外删除应用程序,并在该时间范围内重新安装该应用程序时恢复所述UILocalNotifications。

解决方案是首次启动时删除所有UILocalNotifications,如下所示:

- (BOOL)          application: (UIApplication*) application
didFinishLaunchingWithOptions: (NSDictionary*)  launchOptions
{
  if (self.isFirstRun)
  {
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    self.firstRun = NO;
  }

  /* Other code here */
  ...
}

当然,实现自己的firstRun setter和getter来获取/保存到持久存储中,例如NSUserDefaults

答案 1 :(得分:6)

这实际上是iPhone中的一个错误。如果您删除了应用程序并稍后再安装它,它将具有相同的应用程序ID,因此当重新安装应用程序时,即使您没有打开应用程序,也会触发所有过去的本地通知。