我再来一次:
我想做的是: 如果我按下按钮,然后发布通知。此通知应由同一类的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
方法被触发。
问题
为什么?
如何解决?
感谢阅读!
答案 0 :(得分:1)
您的视图可能尚未加载,因为您正在使用标签栏控制器。尚未加载尚未显示的视图,因此您的viewDidLoad
可能仅针对一个实例进行调用。我建议你调试它并确保你的addObserver
调用真的被执行两次,而不是一次。
答案 1 :(得分:0)
这根本不起作用。您正在发布一个名为@“updated”的通知,但您已附加了名为@“update”的观察者。你应该没有收到任何通知。
答案 2 :(得分:0)
发布通知的方式是同步的。我认为另一个对象尚未注册为观察者,因此无法接收发布的通知。
并且,如果通知发布在另一个线程上,则观察者将在同一线程上获取该通知。