在多个视图控制器中处理相同的NSNotification

时间:2015-08-20 16:53:35

标签: ios objective-c

当我的应用从后台模式返回时,我正在使用以下通知重新加载ViewControllerA。它工作正常,但每次我再次打开应用程序时都会调用applicationEnteredForeground:方法。例如,如果我在屏幕上显示ViewControllerBViewControllerC时关闭应用并再次打开该应用,则会调用该方法,尽管viewDidLoad的{​​{1}}不包含ViewControllerB {1}}方法。我想知道怎么解决这个问题?我的目标是仅在我关闭应用之前屏幕上显示applicationEnteredForeground:时使用applicationEnteredForeground:。 作为一种可能的解决方案,我只需删除ViewControllerA中的NSNotificationCenter,但由于观察者位于viewDidDisappear,因此当用户导航回来时,它将无效,因为{{1}不会再被调用。有没有解决这个问题?

viewDidLoad

2 个答案:

答案 0 :(得分:2)

您应该在viewWillDisappear上删除ViewController A的事件侦听器,并将其添加到viewWillAppear中。这样,VC A只会在可见视图控制器时进行监听。

答案 1 :(得分:1)

您可以通过查看其视图的窗口属性来检查视图控制器是否在屏幕上。它适用于大多数标准情况。

- (void)applicationEnteredForeground:(NSNotification *)notification
{
    if (self.view.window == nil) {
        // Not on screen
        return;
    }

    // do stuff...
}