我有两个 UITableViewController
个对象,它们代表标签栏视图应用程序中的两个标签,订阅通知如下:
- (void)viewDidLoad {
....
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:fileSyncStatusUpdated object:nil];
}
处理程序定义如下:
- (void)update:(NSNotification*)notification {
}
然后,在我的申请中的其他一点,我发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName:fileSyncStatusUpdated object:self userInfo:@{@"path": path}];
问题是只有一个对象收到通知,另一个没有!更糟糕的是,如果我将处理函数更改为
- (void)update {
}
并相应地修改addObserver
调用,然后两个对象都会收到通知。
但我仍然希望将userInfo
传递给两个对象..任何想法可能出错?我的环境是最新的。
更新
我想我找出了通知未送达的原因。在我的解释中,我将参考Jageen在评论中提供的示例代码,您可以从这里下载:
http://dropbox.com/s/515s3qu3a7neqb4/demoTabbar_Notification.zip?dl=0
即使他声称他的代码中的通知没有问题,但是有一个问题:-)如果你启动应用程序,立即点击Call notification
,那么你'我将看到以下输出:
2014-12-15 12:23:32.749 demoTabbar[5019:125437] First view controller call
表示仅第一个标签收到通知。第二个没有收到它。为什么?因为还没有创建!您可以向NSLog()
添加viewDidLoad()
次调用,以确定应用启动时只会加载一个标签!另一个标签是懒洋洋地加载的。
如果您在标签页之间单击并再次按Call notification
,则会看到不同的输出:
2014-12-15 12:26:21.394 demoTabbar[5019:125437] First view controller call
2014-12-15 12:26:21.394 demoTabbar[5019:125437] Second view controller call
答案 0 :(得分:0)
作为测试,请尝试将通知名称更改为您在任何地方复制/粘贴的字符串文字,看看是否会产生影响。
也许你的一个addObserver调用的字符串变量是nil? (抓住稻草......)
我将#defined字符串文字用于我的通知,所以我确定它们是相同的。