【问题标题】:NSNotification not handled by subview contained in a UINavigationControllerNSNotification 未由 UINavigationController 中包含的子视图处理
【发布时间】:2012-05-27 00:56:58
【问题描述】:

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

- (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 为某些 NSNotification 添加观察者,这些 NSNotification 由视图控制器的子视图以编程方式实例化并添加为 MainViewController 的子视图。所以,

  • MainViewController(在 UINavigationController 中)
    • 子视图控制器
      • SubView 发布通知

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

我尝试为 SubView 发布的通知之一向 AppDelegate 添加观察者,它会正确处理它,并且在处理该通知时,MainViewController 不为零.

任何指导将不胜感激。如果您需要任何说明,请告诉我。

【问题讨论】:

    标签: iphone objective-c cocoa-touch nsnotificationcenter


    【解决方案1】:

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

    1. viewController 实际上不是我的应用委托的属性。将其设为属性会导致再次处理 NSNotification。
    2. 经过整理后,选择器中由 NSNotification 触发的代码无法正常工作——它应该将一个新视图推送到 MainViewController 的导航控制器中,结果为 nil .在应用程序委托中为 UINavigationController 创建一个属性也解决了这个问题。

    【讨论】:

    • 在应用委托中有 navController 引用是一件好事。但是,您必须能够通过视图控制器的 navigationController 属性访问 navController 实例,而不是询问应用程序委托(如果您不小心更改了应用程序委托属性,则可能是不同的导航控制器,而任何视图控制器的 navigationController 属性为您自动填充),这对根视图控制器和推送视图控制器都有效。
    • 谢谢,这是一个很好的提示。每当将新视图推送到堆栈上时,我一直确保使用 self.navigationController,所以这还没有咬到我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多