0

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

- (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 中)
    • 子视图控制器
      • 发布通知的子视图

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

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

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

4

1 回答 1

0

好的,这里发生了几件事:

  1. viewController实际上不是我的应用程序委托的属性。使其成为属性会导致 NSNotification 再次被处理。
  2. 处理完之后,由 NSNotification 触发的选择器中的代码无法正常工作——它应该将一个新视图推送到MainViewController的 navigationController 中,结果为 nil。在应用程序委托中为 UINavigationController 创建一个属性也解决了这个问题。
于 2012-05-27T02:07:37.480 回答