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的详细介绍

程序启动原理和UIApplication

1230ios准备 --UIApplication类

UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有啥区别?

iOS开发UI篇—程序启动原理和UIApplication

iOS之UIApplication详解