gpt4 book ai didi

swift - NSNotificationCenter重新执行通知

转载 作者:行者123 更新时间:2023-11-30 13:59:45 24 4
gpt4 key购买 nike

我正在使用 NSNotificationCenter 设置一个当通知跨 3 个 TableViewController(所有都来自同一类的子类)时共享的变量。

除以下情况外,一切正常:

当应用程序转到后台(例如用户按下主页按钮)时,用户位于主视图(实际处理/响应通知的 View )。如果收到通知并且用户从图标或警报启动应用程序,则应用程序的行为就好像它不仅需要处理最后一个通知,还需要处理到目前为止的所有通知。

例如:假设应用程序已经处理了 5 个通知。应用程序移至后台,然后出现通知。用户从图标启动应用程序,这导致应用程序移至前台。该应用程序将针对每个通知触发 1 个操作。

如果用户在应用程序移至后台之前处于任何其他屏幕,则情况并非如此。但是,如果用户移至主视图,则通知已处理,应用程序再次移至后台,在下一个通知时,应用程序将处理 7 个通知(我们的 5 个通知 + 1 个上一个通知 + 1 个当前通知)。

虽然从概念上讲,我的应用程序似乎正在产生 n-观察者,但我不清楚为什么。我在 viewWillAppear 的基类中设置了一个观察者,并在 viewWillDisappear 中删除了它(还尝试了 deinit block - 行为没有变化)。

知道为什么观察者会累积所有通知吗?这是观察者的正常行为吗?如果是这样,如何删除“观察和处理”消息?

最佳答案

我的问题的解决方案是在添加观察者之前将其删除。

问题本身归结为清理顺序(即在 viewWillAppear 中添加观察者,删除观察者 viewWillDisappear)与我的预期不符。结果是观察者被一次又一次地添加,但相应的“删除”实际上并没有“发生”。

我猜这是因为添加/删除观察者发生在基类(而不是子类)中。

关于swift - NSNotificationCenter重新执行通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com