我有两个 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在注释中提供的示例代码,您可以从这里下载它:
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发布于 2014-12-12 12:19:58
作为一种测试,尝试将通知名更改为字符串文本,以便在任何地方复制/粘贴,并查看这是否有区别。
也许您的addObserver调用之一的字符串变量是零?(在这里抓吸管)
我使用#定义的字符串文字作为我的通知,所以我确信它们是相同的。
https://stackoverflow.com/questions/27443342
复制相似问题