我的应用程序具有使用UILocalNotification的警报功能,并且效果很好。但是,如果用户卸载了该应用程序,则稍后重新安装该应用程序,他将立即收到所有“中间”通知。
我曾尝试致电:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
如果是第一次启动该应用程序,但没有帮助,因为甚至在调用application:didFinishLaunchingWithOptions:之前就已收到通知。
[4.0在情况更糟,即使用户已删除该应用程序,但仍重复发出警报,但至少该错误已由Apple在更高版本中修复。但是现在我坚持了这一点。有人有主意吗?
这实际上是iPhone中的错误。如果您删除了该应用程序并随后又安装了该应用程序,它将具有相同的应用程序ID,因此当重新安装该应用程序时,即使您没有打开该应用程序,也会触发所有过去的本地通知。
根据Apple的说法,这不是错误(我提交了错误报告)。万一用户意外删除了该应用程序,系统会为已卸载应用程序保留UILocalNotifications 24小时,如果在该时间段内重新安装了该应用程序,则系统会还原所述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
。