我正在使用NSNotificationCenter在3个TableViewControllers中传入通知时设置共享变量(所有子类都来自同一个类)。
除以下情况外,一切正常:
当应用程序进入后台时,用户处于主视图(实际处理/响应通知的视图)(例如,用户按下主页按钮)。如果收到通知并且用户通过图标或警报启动应用程序,则应用程序的行为就像它不仅需要处理上一个通知而且还需要处理所有通知。
例如:let;假设应用已经处理了5个通知。该应用程序移至后台,然后收到通知。用户从图标启动应用程序,使应用程序移动到前台。该应用将针对每个通知触发1个操作。
如果用户在应用程序移至后台之前处于任何其他屏幕,则情况并非如此。但是,如果用户移动到主视图,则处理通知并再次将应用移至后台,在下一个通知中,应用将处理7个通知(我们有5个通知+ 1个前一个+ 1个当前通道)。
虽然从概念上看,似乎我的应用程序正在产生n个观察者,但我不清楚为什么。我在viewWillAppear
的基类中设置了一个观察者,并在viewWillDisappear
中删除(也尝试了deinit
块 - 行为没有变化。)
知道为什么观察者会积累所有通知吗?这是观察者的正常行为吗?如果是这样,我如何删除“观察和处理过的”消息?
答案 0 :(得分:0)
我的问题的解决方案是在添加之前移除观察者。
问题本身归结为清理的顺序(即在viewWillAppear中添加观察者,删除观察者viewWillDisappear)与我的期望不符。结果是观察者一次又一次地被添加,但相应的“移除”实际上并没有“发生”。
我想这是因为添加/删除观察者发生在基类(而不是子类)中。