NSNotification的问题不适用于尚未“访问”的视图控制器

时间:2011-03-30 02:30:37

标签: iphone objective-c

所以,当我从服务器获取数据时,我正在使用NSNotification传递消息。问题是如果尚未“访问”控制器,则不会响应通知。我的意思是,在我的应用中,SignInViewController xib中有UITabBarControllerMainWindow。在app委托中,他们的两个视图都被添加到窗口中,登录视图位于顶部。这有效地“访问”了相应的控制器。如果UITabBarController视图属于DashboardViewController

当用户从SignInViewController成功登录时,我从服务器获得JSON响应,该响应被分解,然后发送给解析各个块的侦听器。一旦解析完毕,最后的对象就会被消息传出,以供必须使用它们的控制器接收。

所有这些假设完全正常,除了实际上只接收到一个块并且恰好是DashboardViewController的目标块,并且因为控制器的视图已经预先设置好,所以控制器是“实例化的” “并且可以收到消息。还没有访问该行的所有其他控制器(实例化?),因此它们不会收到消息,而且正在发送的对象将被遗忘。

到目前为止我发现的唯一所谓的解决方案是在应用程序委托中添加仪表板视图下剩余控制器的视图。如果我这样做,消息传递起作用,但这感觉就像是错误的方式,因为视图将不会被使用,它们只是在子视图数组中浪费空间(内存?)。

所以,我想知道是否有更好的方法可以确保所有控制器都能收到他们发送的对象。

另一方面,应用程序曾经工作得很好,但我回去同步所有传递的对象之间的代码,或者换句话说我将它转换为消息,并且一旦我这样做它就停止了工作它是,我现在处于我现在的状态......

我很感激任何帮助。 < 3

更新

- (id)init {
    self = [super init];

    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDevicesFromNotification:) name:DevicesParsed object:nil];
    }

    return self;
}

2 个答案:

答案 0 :(得分:0)

听起来您正在各种视图控制器viewDidLoad中添加侦听器,或者可能在这些控制器中的自定义视图的init方法中添加侦听器。你应该做的是在控制器的init方法中添加监听器,因此在你第一次创建它们时就会注册它们。

答案 1 :(得分:0)

事实证明,应该用于设置NSNotification(s)的方法是awakeFromNibinitinitWithNibName:bundle:方法不会自动调用,只有当你自己进行实例化时(我可能错了,但这是我到目前为止看到的模式)。