【问题标题】:NSNotificationCenter not working on iPhone side of Universal AppNSNotificationCenter 在通用应用程序的 iPhone 端不起作用
【发布时间】: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 之间的公共类以相同的顺序实例化,我可以通过控制台日志验证这一点。我不知道为什么这没有按预期工作。救命!

【问题讨论】:

    标签: iphone objective-c ipad ios ios4


    【解决方案1】:

    addObserver 方法肯定会在 iPhone 上调用吗?仅仅因为它是子类化并不意味着必要的超级调用已经到位。

    【讨论】:

    • 未在共享应用委托上调用 addObserver 方法。共享应用程序委托发布通知。 iPad 和 iPhone 的共同视图控制器是在它的 init 方法中添加观察者。在两台设备上调用相同的 init 方法,但只有 iPad 有效。
    • 您是否验证过(使用调试器和所有)addObserver 真的被执行了?另外,上游定义的常量是否足以完全相同?
    • 哦,最后一点:onDataReady:(id)sender 真的在 iPhone Viewcontroller 中定义了吗?为了给你更好的帮助,最好有其中一些类的 .h 文件....
    • 不确定如何验证 addObserver 是否正常工作,因为它在 NSNotificationCenter 中。我没有收到任何错误。
    • 并且定义了onDataReady方法。它与 iPhone 中的视图控制器和 iPad 中的视图控制器相同。只有 iPad 工作。
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2012-09-25
    • 2017-11-22
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多