2011-08-11 5 views
2

ビューベースのアプリケーションとして新しいxcodeプロジェクトを作成しましたが、別のUINavigationController(s)内で使用する予定のUIViewController(s)のセットがあります。self.navigationControllerは、RootViewControllerとして割り当てられた後はnullですか?

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]; 

_navigationControllersParentViewControllerの一員として保持されるので、私は、ループ内で開始されたすべての私のナビゲーションコントローラを想定保管されています。すべてのUINavigationController(S)と、すべてのmyViewControllersが開始された後、前ParentViewController.m

_navigationControllersによってので、放出されたかnilになるが、私はSomeOtherViewControllerをプッシュするMyViewControllerでnavigationControllerを使用しようとすると、それは動作しませんされません。

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

私はpushViewController:someOtherViewControllerの前にブレークポイントを置き、 "po [self navigationController]"とコンソールはnilの参照を教えてくれます。

私は [[UINavigationController alloc] initWithRootViewController:aVC]を行う際rootControllerからnavigationControllerを割り当てずに同じことをAppleの「iOS用のビューコントローラプログラミングガイド」ので、根本的なメカニズムは、aVC.navigationControllerとしてnavigationControllerを割り当てるすると仮定。

forループの2行目のマークを解除しない限り、のnavigationControllerはaVCに存在しません。

私はメカニズムを誤解していますか?私の場合には別の解決策がありますか? ありがとうございます!

+0

あなたは_navigationControllersのプロパティ宣言をparent.hファイルから表示できますか?あなたの仮定/論理はすべて私には分かります(つまり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]; 

これで確認してください。

関連する問題