6

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

我试过打电话:

[[UIApplication sharedApplication] cancelAllLocalNotifications];

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

这在 4.0 中更糟糕,即使用户删除了应用程序也会重复警报,但至少苹果在以后的版本中修复了这个错误。但是现在我坚持这一点。有人有想法吗?

4

2 回答 2

15

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

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

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

  /* Other code here */
  ...
}

当然,实现你自己的firstRunsetter 和 getter 来获取/保存到持久存储中,比如NSUserDefaults.

于 2013-02-25T10:14:22.977 回答
6

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

于 2011-02-07T15:31:48.607 回答