2011-08-11 47 views
2

我創建了一個新的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在MyViewControllerSomeOtherViewController,這是行不通的:

- (IBAction)pushDetailView { 
    [self.navigationController pushViewController:self.detailViewController animated:YES]; 
} 

我在pushViewController:someOtherViewController和「po [self navigationController]」之前放了一個斷點,控制檯告訴我這是一個nil引用。

我認爲,當我做 [[UINavigationController alloc] initWithRootViewController:aVC],底層的機制將分配navigationControlleraVC.navigationController,因爲蘋果的「視圖控制器編程指南適用於iOS」的確不分配給navigationControllerrootController相同。

除非我取消了for循環//[aVC setNavigationController:navController];的第二行,否則navigationController不存在於aVC中。

我誤解了這個機制嗎?我的情況有另一種解決方案嗎? 在此先感謝!

+0

您可以從parent.h文件中顯示_navigationControllers的屬性聲明。你問的所有假設/邏輯對我來說似乎都可以(即,initWithRootViewController應該自動在根視圖控制器上設置navigationController屬性) – gamozzii

回答

-1
_navigationControllers = [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]; 
} 

// assuming index 0 navigation controller is with 'ParentViewController' 
self.rootViewController = [_navigationControllers objectAtIndex:0]; 

檢查與此。

相關問題