NSNotification不由UINavigationController中包含的子视图处理

时间:2012-05-27 00:56:59

标签: iphone objective-c cocoa-touch nsnotificationcenter

在我的AppDelegate中,我正在实例化一个UINavigationController并添加我的“主”视图(让我们称之为 MainViewController )作为导航控制器的根视图控制器。然后将导航控制器作为子视图添加到app delegate的窗口,并使窗口可见。即,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   // viewController is a property of the app delegate
   viewController = [[MainViewController alloc] init];
   viewController.context = [self managedObjectContext];

   UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];

   [self.window addSubview:navController.view];
   [self.window makeKeyAndVisible];
   return YES;
}

MainViewController 为一些NSNotifications添加观察者,这些NSNotifications由视图控制器的子视图发布,以编程方式实例化并添加为 MainViewController 的子视图。所以,

  • MainViewController (在UINavigationController中)
    • SubViewController
        发布通知的
      • SubView

一旦我将UINavigationController添加到混合中, MainViewController 就不再正确处理 SubView 发布的通知。如果我删除UINavigationController并简单地将 MainViewController 添加为AppDelegate窗口的子视图,则会正确处理通知。

我尝试将一个观察者添加到AppDelegate,用于 SubView 发布的其中一个通知,并且它正确处理它,并且在处理该通知时, MainViewController 不是零

非常感谢任何指导。如果您需要任何澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

好的,这里发生了一些事情:

  1. viewController实际上并不是我的app委托的属性。使其成为属性导致再次处理NSNotification。
  2. 在整理完之后,由NSNotification触发的选择器中的代码无法正常工作 - 它应该将新视图推送到 MainViewController 的navigationController,这是零。在UINavigationController的app委托中创建属性也解决了这个问题。