在我的AppDelegate中,我實例化了一個UINavigationController並添加了我的「主」視圖(我們稱之爲MainViewController)作爲導航控制器的根視圖控制器。然後將導航控制器作爲子視圖添加到應用程序委託的窗口,並使窗口可見。即,NSNotification不是由包含在UINavigationController中的子視圖處理的
- (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
- 子視圖該職位的通知
- SubViewController
一旦我將UINavigationController添加到組合中,MainViewController不再適當地處理子視圖發佈的通知。如果我刪除了UINavigationController,並且只需將MainViewController作爲AppDelegate窗口的子視圖,就可以正確處理通知。
我嘗試添加的觀察員AppDelegate中所張貼的子視圖通知之一,它處理得當,並在處理任何通知,MainViewController不爲零。
任何指導將不勝感激。請讓我知道你是否想要澄清。
在應用程序委託中擁有navController引用是件好事。但是,您必須能夠通過視圖控制器的「navigationController」屬性訪問navController實例,而不是嚮應用程序委託請求它(如果意外更改了應用程序委託屬性,則可能是不同的navControllers,而任何視圖控制器的navigationController屬性會自動填充),這對於根視圖和推送視圖控制器都是有效的。 –
謝謝,這是一個很好的提示。無論何時將新視圖推入堆棧,我都一直在確保使用self.navigationController,所以還沒有咬我。 –