首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSNotification只由一个接收者接收

NSNotification只由一个接收者接收
EN

Stack Overflow用户
提问于 2014-12-12 12:07:03
回答 1查看 64关注 0票数 0

我有两个 UITableViewController对象,它们表示一个选项卡视图应用程序中的两个选项卡,订阅通知如下:

代码语言:javascript
运行
复制
- (void)viewDidLoad {
    ....
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:fileSyncStatusUpdated object:nil];
}

以及定义如下的处理程序:

代码语言:javascript
运行
复制
- (void)update:(NSNotification*)notification {
}

然后,在我的应用程序中的另一个点,我发送通知:

代码语言:javascript
运行
复制
[[NSNotificationCenter defaultCenter] postNotificationName:fileSyncStatusUpdated object:self userInfo:@{@"path": path}];

问题是只有一个对象接收通知,而另一个对象没有收到通知!为了使事情更奇怪,如果我将处理程序函数更改为

代码语言:javascript
运行
复制
- (void)update {
}

并相应地修改addObserver调用,然后两个对象都会收到通知。

但我仍然想把userInfo传递给这两个对象。知道有什么不对劲吗?我的环境是最新的。

更新

我想我想出了为什么通知没被送达的原因。在我的解释中,我将参考Jageen在注释中提供的示例代码,您可以从这里下载它:

Notification.zip?dl=0

尽管他声称他的代码中的通知没有问题,但是有一个问题:-)如果您启动该应用程序,然后立即单击Call notification,那么您将看到以下输出:

代码语言:javascript
运行
复制
2014-12-15 12:23:32.749 demoTabbar[5019:125437] First view controller call

这意味着只有第一个选项卡接收到通知。第二个没有收到。为什么?因为它还没有被创造出来!您可以将NSLog()调用添加到viewDidLoad(),以发现在应用程序启动时只加载了一个选项卡!另一个选项卡是延迟加载的。

如果您在制表符之间单击并再次按Call notification,您将看到一个不同的输出:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-12-12 12:19:58

作为一种测试,尝试将通知名更改为字符串文本,以便在任何地方复制/粘贴,并查看这是否有区别。

也许您的addObserver调用之一的字符串变量是零?(在这里抓吸管)

我使用#定义的字符串文字作为我的通知,所以我确信它们是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27443342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档