我的应用程序使用UILocalNotification具有闹钟功能,效果很好。但是,如果用户卸载应用程序,然后重新安装它,他将立即收到所有“中间”通知。
我试过打电话:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
如果它是第一次启动应用程序,但它没有帮助,因为甚至在应用程序之前收到通知:didFinishLaunchingWithOptions:被调用。
在4.0中,即使用户删除了应用程序,重复警报也是如此,但至少该错误是Apple在以后的版本中修复的。但是现在我坚持这个。有人有想法吗?
答案 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,因此当重新安装应用程序时,即使您没有打开应用程序,也会触发所有过去的本地通知。