我創建了一個新的xcode項目作爲基於視圖的應用程序,並且我有一套UIViewController
(s),我打算在單獨的UINavigationController
(s)中使用它。將它指定爲RootViewController後,self.navigationController爲空?
在ParentViewController.m
所有UINavigationController
(S)和已經啓動之後的所有myViewControllers之前:
NSMutableArray *navControllers = [[NSMutableArray array];
for (id aVC in self.myViewControllers) {
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];
//[aVC setNavigationController:navController];
[navController setNavigationBarHidden:YES];
[navController setToolbarHidden:YES];
[navControllers addObject:navController];
[navController release];
}
_navigationControllers = [[NSArray arrayWithArray:navigationControllers] retain];
_navigationControllers
被保留作爲ParentViewController
成員,所以我想內發起的for循環所有我的導航控制器保持通過_navigationControllers
所以他們不會被釋放或成爲nil
,但是當我嘗試使用navigationController在MyViewController
推SomeOtherViewController
,這是行不通的:
- (IBAction)pushDetailView {
[self.navigationController pushViewController:self.detailViewController animated:YES];
}
我在pushViewController:someOtherViewController
和「po [self navigationController]」之前放了一個斷點,控制檯告訴我這是一個nil
引用。
我認爲,當我做 [[UINavigationController alloc] initWithRootViewController:aVC]
,底層的機制將分配navigationController
爲aVC.navigationController
,因爲蘋果的「視圖控制器編程指南適用於iOS」的確不分配給navigationController
的rootController
相同。
除非我取消了for循環//[aVC setNavigationController:navController];
的第二行,否則navigationController
不存在於aVC中。
我誤解了這個機制嗎?我的情況有另一種解決方案嗎? 在此先感謝!
您可以從parent.h文件中顯示_navigationControllers的屬性聲明。你問的所有假設/邏輯對我來說似乎都可以(即,initWithRootViewController應該自動在根視圖控制器上設置navigationController屬性) – gamozzii