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