NSNotification仅由一位收件人收到

时间:2014-12-12 12:07:04

标签: ios objective-c xcode ios8

我有两个 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

1 个答案:

答案 0 :(得分:0)

作为测试,请尝试将通知名称更改为您在任何地方复制/粘贴的字符串文字,看看是否会产生影响。

也许你的一个addObserver调用的字符串变量是nil? (抓住稻草......)

我将#defined字符串文字用于我的通知,所以我确定它们是相同的。