Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在多个视图控制器中处理同一通知_Ios_Objective C - Fatal编程技术网

Ios 在多个视图控制器中处理同一通知

Ios 在多个视图控制器中处理同一通知,ios,objective-c,Ios,Objective C,当我的应用程序从后台模式返回时,我正在使用以下通知重新加载ViewControllerA。它工作正常,但每次我再次打开应用程序时都会调用applicationEntedForeGround:方法。例如,如果我在ViewControllerB或ViewControllerC出现在屏幕上时关闭应用程序,并再次打开它,则该方法将被调用,尽管ViewControllerB的viewDidLoad不包含applicationeredforeground:方法。我想知道如何解决这个问题?我的目标是在关闭应用

当我的应用程序从后台模式返回时,我正在使用以下通知重新加载
ViewControllerA
。它工作正常,但每次我再次打开应用程序时都会调用
applicationEntedForeGround:
方法。例如,如果我在
ViewControllerB
ViewControllerC
出现在屏幕上时关闭应用程序,并再次打开它,则该方法将被调用,尽管
ViewControllerB
viewDidLoad
不包含
applicationeredforeground:
方法。我想知道如何解决这个问题?我的目标是在关闭应用程序之前,仅当
ViewControllerA
出现在屏幕上时,才使用
applicationentedforeground:
。 作为一种可能的解决方案,我只需删除
视图中的
NSNotificationCenter
,但由于观测者位于
viewDidLoad
中,因此当用户导航返回时,它将不起作用,因为不会再次调用
viewDidLoad
。这有什么解决办法吗

- (void)viewDidLoad {

   [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationEnteredForeground:)
                                                 name:UIApplicationWillEnterForegroundNotification
                                               object:nil];

}

- (void)applicationEnteredForeground:(NSNotification *)notification {

  // do stuff...

}

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

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

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

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

您可以通过检查视图控制器的窗口属性来检查视图控制器是否在屏幕上。它将在大多数标准情况下工作

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

    // do stuff...
}

您可以通过检查视图控制器的窗口属性来检查视图控制器是否在屏幕上。它将在大多数标准情况下工作

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

    // do stuff...
}

您可以通过检查视图控制器的窗口属性来检查视图控制器是否在屏幕上。它将在大多数标准情况下工作

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

    // do stuff...
}

您可以通过检查视图控制器的窗口属性来检查视图控制器是否在屏幕上。它将在大多数标准情况下工作

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

    // do stuff...
}


根据经验法则,如果您想仅在视图控制器处于活动状态时捕获
NSNotification
s,则可以在其
视图中添加观察者将出现:
/
视图显示:
并在
视图中删除观察者将消失:
/
视图显示:
,如果只想在视图控制器处于活动状态时捕获
NSNotification
s,可以在其
视图中添加观察者将出现:
/
视图显示:
并删除
视图中的观察者将消失:
/
视图显示:
,如果只想在视图控制器处于活动状态时捕获
NSNotification
s,可以在其
视图中添加观察者将出现:
/
视图显示:
并删除
视图中的观察者将消失:
/
视图显示:
,如果只想在视图控制器处于活动状态时捕获
NSNotification
s,则可以在其
视图中添加观察者,并将其显示为:
/
视图显示为:
,然后在
视图中删除观察者,观察者将消失为:
/
视图显示为:
。此外,您还可以使用NSWindow的-ALLOW进行三次检查,您可以使用NSWindow的进行三重检查-此外,您可以使用NSWindow的进行三重检查-此外,您可以使用NSWindow的-self.view.window==nil进行三重检查来检查窗口是否在屏幕上。它甚至没有检查,它可能是隐藏的,但内存分配。改为使用NSWindow检查窗口的任何部分是否可见。这是iOS,而不是OS X,情况有点不同。啊,对不起,没有看到标记:Dself.view.window==nil是检查窗口是否在屏幕上的错误方法。它甚至没有检查,它可能是隐藏的,但内存分配。改为使用NSWindow检查窗口的任何部分是否可见。这是iOS,而不是OS X,情况有点不同。啊,对不起,没有看到标记:Dself.view.window==nil是检查窗口是否在屏幕上的错误方法。它甚至没有检查,它可能是隐藏的,但内存分配。改为使用NSWindow检查窗口的任何部分是否可见。这是iOS,而不是OS X,情况有点不同。啊,对不起,没有看到标记:Dself.view.window==nil是检查窗口是否在屏幕上的错误方法。它甚至没有检查,它可能是隐藏的,但内存分配。使用NSWindow检查窗口的任何部分是否可见。这是iOS,而不是OS X,情况有点不同。啊,对不起,没有看到标签:D