UIApplication cancelAllLocalNotifications 如何在应用更新之间工作?
Posted
技术标签:
【中文标题】UIApplication cancelAllLocalNotifications 如何在应用更新之间工作?【英文标题】:How does UIApplication cancelAllLocalNotifications work between app updates? 【发布时间】:2012-03-02 18:05:46 【问题描述】:有谁知道cancelAllLocalNotifications 方法在UIApplication 上是如何工作的?我想知道ios如何知道要取消什么。它通过 App ID 知道吗?还是它以某种方式使用应用程序的版本号?
我现在遇到的通知比我预期的要多。这是工作流程:
-
取消应用启动时的所有通知
在应用退出时安排通知
*安排时,将通知信息添加到“最近”列表中
*在安排时,每天只安排 1 个通知(在我断开手机之前在 XCode 中的日志记录中验证)。
现在,这就是我正在经历的:
-
每天收到 4 条通知
只有 1 条通知显示在我的“最近”列表中(这是有道理的,因为这就是我正在安排的全部内容)
以前,我将每天的通知数设置为 3。然后我更新了调用“cancelAllLocalNotifications”方法的版本号(例如,从 1.1.0 到 1.1.1)。
因此,如果以任何方式基于应用程序的版本/捆绑 ID 取消通知,我会收到旧通知和新通知。
但是,如果不是,并且 iOS 知道取消从以前版本 1.1.0 安排的通知,那么我不知道这些额外通知来自哪里。
【问题讨论】:
在应用启动时,你在哪里调用cancelAllLocalNofications? @vipinagg,好点。我在两个地方调用它:(1)在收到通知时在应用程序委托中(这是错误的,但事实证明第二次出现的位置无关紧要),并且(2) 在“applicationDidEnterBackground”方法中,我调用了一个调度所有通知的函数,该函数所做的第一件事就是在调度任何新通知之前取消所有通知。但好点 - 猜你质疑它是否只在 application:didFinishLaunchingWithOptions: 中调用,而不是在 "applicationWillEnterForeground:" 中调用。 关注我对这个话题的回答。 http://***.com/a/42724415/1720559 【参考方案1】:我相信本地和远程通知基于 App ID (AppleID + BundleID)。因此,无论版本如何,您都会收到通知。我可以看到支持和反对这种实现的论点。
您是否需要一些策略来处理这个...功能?
【讨论】:
是的,肯定需要一些策略来处理它。本质上,我需要在用户更新应用程序之前以某种方式取消所有预定的通知(b/c 有一个新的应用程序 ID)。或者,尽管我非常怀疑这是可能的,但如果我可以在应用程序更新后强制取消,那就足够了(怀疑 Apple 提供了这种级别的控制)。以上是关于UIApplication cancelAllLocalNotifications 如何在应用更新之间工作?的主要内容,如果未能解决你的问题,请参考以下文章
UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有啥区别?