-1

我在 a 上有两个选项卡UITabBarController,我都注册了NSNotificationCenter,我的问题是我没有在隐藏选项卡上收到通知(即它还没有被调用viewDidAppear:)。我的想法是不在屏幕上(即隐藏)的控制器不响应NSNotifications. 我可以用不同的方式做事,这不是问题,但我只是想验证为什么隐藏的选项卡没有收到通知,以防我遗漏了其他东西并且它实际上应该工作......

编辑:

@Fab1n为我指出了正确的方向,我错误地习惯于viewWillDisappear:移除观察者,所以当视图消失时不再监听通知。我会把它移到dealloc.

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter removeObserver:self];
}

变成:

- (void)dealloc {
        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
        [notificationCenter removeObserver:self];
}

非常感激。

4

2 回答 2

1

据我所知,尽管第一个标签栏元素是延迟加载的。当您第一次点击代表标签栏项目(或通过以编程方式访问其视图属性)时,它们会被加载。之后,即使您选择另一个选项卡项目,他们也可以收到您想要的任何消息。

于 2013-04-09T08:16:29.760 回答
1

为了安全起见:注册您NSNotification-init或(通过 IB)-initWithNibName:

当您设置 的属性时,UITabbarController会初始化a 的控制器。initcontrollersUITabbarController

viewWillAppear并且viewDidAppear每次通过点击标签栏图标使其中一个控制器可见时都会被调用。

解决方案:

  1. NSNotification通过覆盖-init每个“子”控制器来注册您的
  2. 注销通知-dealloc(不要[super dealloc]用 ARC 打电话!!!)

现在一切正常!

于 2013-04-09T08:22:44.947 回答