私の 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は、プログラムによってインスタンス化され、 MainViewControllerのサブビューとして追加されたビュー コントローラーのサブビューによって投稿される一部の NSNotifications のオブザーバーを追加します。そう、
- MainViewController (UINavigationController 内)
- SubViewController
- 通知を投稿するSubView
- SubViewController
UINavigationController をミックスに追加すると、 MainViewController が SubViewによって投稿された通知を適切に処理しなくなります。UINavigationController を削除し、MainViewController を AppDelegate のウィンドウのサブビューとして追加するだけで、通知が適切に処理されます。
SubViewによって投稿された通知の 1 つに対して AppDelegate にオブザーバーを追加しようとしましたが、適切に処理され、その通知を処理している間、MainViewControllerは nil ではありません。
ガイダンスをいただければ幸いです。説明が必要な場合はお知らせください。