NSNotification问题:它已发布但只是由同一个类的一个实例缓存,为什么?

时间:2010-10-08 00:06:58

标签: iphone objective-c

我再来一次:

我想做的是: 如果我按下按钮,然后发布通知。此通知应由同一类的2个实例缓存。

问题:
通知已发布,但它仅由一个实例缓存。

一些代码和解释
我有1个标签栏控制器
我有3个标签(3个不同的视图-xib文件 - )
2个视图引用相同的(视图控制器)类(因此,同一个类有2个实例,让我们说A类) 另一个选项卡/视图引用另一个类(B类)

如果我按下一个视图的按钮,则会触发B类方法,并且在某些时候会执行此操作:

[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil ];

在A类viewDidLoad方法中我有这个:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateAll:) name:@"update" object:nil];

另外,我已将updateAll函数定义为:

- (void) updateAll: (NSNotification *) notification {
    NSLog(@"called");
}

正如我之前所说,只有一次updateAll方法被触发。

问题
为什么? 如何解决?

感谢阅读!

3 个答案:

答案 0 :(得分:1)

您的视图可能尚未加载,因为您正在使用标签栏控制器。尚未加载尚未显示的视图,因此您的viewDidLoad可能仅针对一个实例进行调用。我建议你调试它并确保你的addObserver调用真的被执行两次,而不是一次。

答案 1 :(得分:0)

这根本不起作用。您正在发布一个名为@“updated”的通知,但您已附加了名为@“update”的观察者。你应该没有收到任何通知。

答案 2 :(得分:0)

发布通知的方式是同步的。我认为另一个对象尚未注册为观察者,因此无法接收发布的通知。

并且,如果通知发布在另一个线程上,则观察者将在同一线程上获取该通知。