【问题标题】:iOS NSNotification - how to safely ignore when coming out of suspendediOS NSNotification - 退出暂停时如何安全忽略
【发布时间】:2011-11-04 14:09:39
【问题描述】:

有时,当我正在开发的应用程序退出暂停模式时,我需要确保它不会响应 iOS 在应用程序暂停时为其保存的通知。在哪里可以确定我的响应代码不会运行?

我希望将 removeObserver 设置为 applicationWillEnterForeground 可以解决问题,但我在 NSNotification 文档中找不到任何相关内容。

编辑: 让我添加场景的细节:

我正在开发的应用程序会检查未来 7 天范围内日历事件的更改。它两次刷新它的数据(请求 eventStore): 1. 当 NSNotification 来自 iPhone 日历时,关于更改。 2. 应用程序第一次能够在新的一天,因为 7 天的范围已经改变。

我遇到的设计挑战是两种情况同时为真(应用程序从暂停状态返回,这是新的一天,并且在应用程序暂停时修改了日历事件)。在这种情况下,我只想重新查询一次事件存储。我的想法是,在 applicationWillEnterForeground 中,如果这是当天的第一次发布,请告诉应用程序忽略或删除任何通知。 我的印象是,我对 NSNotifications 在这种情况下如何工作的假设可能不正确。任何指导都会很棒!

【问题讨论】:

    标签: iphone ios suspend nsnotification


    【解决方案1】:

    为什么不将观察者从-applicationDidEnterBackground:的通知中心移除?

    然后你就可以在-applicationWillEnterForeground:重新开始观察了。

    【讨论】:

    • 感谢您的想法,但大多数情况下,在应用程序暂停时发生的通知是需要的,但在某些情况下,直到应用程序再次变为活动状态才明显可见class="comcopy">跨度>
    【解决方案2】:

    当您被暂停时,会收到哪些 NSNotifications?您正在运行后台任务吗?

    我真的想不出不响应 NSNotification 是个好主意的情况。它们实际上是与其他任何消息一样的消息,只是具有不同的路由机制。

    UILocalNotification 将是一个不同的问题。

    【讨论】:

    • 大卫,我在原始 cmets 中添加了我试图解决的场景。我没有运行后台任务,但我明白,在应用程序退出暂停状态后,任何已发送(或试图发送)的通知都将由应用程序执行(或重新发送到)
    • 好的,我对 EK 不熟悉,但它确实会在您的应用程序运行时讨论修改。哪个,如果它被暂停,它不是。但我会假设文档具有误导性。另一方面,这值得担心吗? 7天查询贵吗?如果确实如此,您总是可以设置一些“我需要更新”状态,然后如果该状态尚未设置,则运行稍微延迟的更新 (performSelector:withObject:afterDelay:)。
    • performSelector:withObject:afterDelay: 看起来适合我的情况,因为我还看到多个 EKEventChangeNotifications 也可以收集(我认为应用程序最多只能收到一个)。至于如果它运行两次是一项昂贵的操作,它可能不是一个很好的点,但我将来自 EKevents 的数据存储在核心数据中并更新两次,然后让核心数据更新相关的 FRC,从而更新 UI ,我觉得不太好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-04-13
    • 2017-01-29
    相关资源
    最近更新 更多