NSNotificationCenter 在通用应用程序的 iPhone 端不起作用
Posted
技术标签:
【中文标题】NSNotificationCenter 在通用应用程序的 iPhone 端不起作用【英文标题】:NSNotificationCenter not working on iPhone side of Universal App 【发布时间】:2010-12-16 23:05:31 【问题描述】:我正在开发适用于 iPad 和 iPhone 的通用应用程序。我有一个共享应用程序委托、一个 iPad 应用程序委托(共享共享的子类)和一个 iPhone 应用程序委托(也是共享的子类)——所有这些都基于 XCode 中的模板。该应用程序还有一个用于导航的共享视图控制器。在 iPad 中,它用作 SplitViewController
中的主视图控制器。在 iPhone 应用程序中,它显示为 UINavigationController
的根视图控制器。
在我的共享应用程序委托中,我从我的网络服务器获取一些 JSON
来配置应用程序,当我完成解析该数据后,我将通知发布到 NSNotificationCenter
(defaultCenter)。
[[NSNotificationCenter defaultCenter] postNotificationName:kDataReady object:nil];
共享视图控制器是此通知的观察者。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onDataReady:)
name:kDataReady
object:nil];
当我在 iPad 上运行应用程序时,共享视图控制器正在接收此通知并适当地调用选择器。在 iPhone 上运行时,它不是。 iPhone 和 iPad 之间的公共类以相同的顺序实例化,我可以通过控制台日志验证这一点。我不知道为什么这没有按预期工作。救命!
【问题讨论】:
【参考方案1】:addObserver
方法肯定会在 iPhone 上调用吗?仅仅因为它是子类化并不意味着必要的超级调用已经到位。
【讨论】:
未在共享应用委托上调用 addObserver 方法。共享应用程序委托发布通知。 iPad 和 iPhone 的共同视图控制器是在它的 init 方法中添加观察者。在两台设备上调用相同的 init 方法,但只有 iPad 有效。 您是否验证过(使用调试器和所有)addObserver 真的被执行了?另外,上游定义的常量是否足以完全相同? 哦,最后一点:onDataReady:(id)sender 真的在 iPhone Viewcontroller 中定义了吗?为了给你更好的帮助,最好有其中一些类的 .h 文件.... 不确定如何验证 addObserver 是否正常工作,因为它在 NSNotificationCenter 中。我没有收到任何错误。 并且定义了onDataReady方法。它与 iPhone 中的视图控制器和 iPad 中的视图控制器相同。只有 iPad 工作。以上是关于NSNotificationCenter 在通用应用程序的 iPhone 端不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 8 中使用带有 NSNotificationCenter 的小部件
在 NSNotificationCenter 中添加自定义属性