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