2011-01-30 8 views
1

現在のiOS SDKにアプリケーションを移行中です。そのルートコントローラはUINavigationControllerであり、もう1つのビューコントローラとして別のUINavigationControllerです。iOS SDK 4.2でネストされたUINavigationControllerがクラッシュするアプリケーション

アプリケーションは、無限の再帰によって引き起こされるEXC_BAD_ACCESSでクラッシュするようになりましたが、私はstrackトレースを理解できません。私が知る限り、現在のSDKでプロジェクト設定をコンパイルすることを期待する変更はありません。

新しいナビゲーションベースのアプリケーションを作成し、アプリケーションをクラッシュさせた入れ子のUINavigationControllerを追加しました。入れ子はUINavigationControllerですか?一般的に悪い考えですか?

これを引き起こす可能性のあるヒント、またはスタックトレースを解釈して問題をデバッグする方法についてのヒントは非常に高く評価されています。

+1

はい、入れ子のナビゲーションコントローラは悪い考えです。 'pushViewController:animated:'はナビゲーションコントローラに渡すと例外をスローします。ビューコントローラとUIフローをどのように構築するかについて、別の質問をするべきでしょう。 –

+0

奇妙なIBは、ネストした 'UINavigationController'を持つNIBを追加することができます。私は私のアプリを再構築できるかどうかを見ていきます。 –

答えて

3

あなたは隠された(インターフェイスビルダー内またはコード内)に、親ナビゲーションコントローラのnavigationbarを設定するときには、ビューをロードする前に動作します:

navigationController.navigationBar.hidden = YES; 
[self.window addSubview:navigationController.view]; 
+0

あなたは正しいです、ありがとう! –

1

ネストされたUINavigationControllerを持つのは奇妙に思えますが、私は何を知っていますか?ネストされたnavコントローラのルートビューコントローラとは何ですか?うまくいけばトップのnavコントローラではない。

+0

2つの別々のビュースタックが必要だったため、それらは入れ子になっています。これは間違いないかもしれませんが、SDKのアップグレード後には動作して停止していました。そしていいえ、循環参照はありません。 –

0

ここでは、次のとおりです。

  1. 作成新しいUINavigationController
  2. viewDidLoadまたはviewWillLoadあなたが望むルートにコントローラを割り当てて初期化します
  3. NavigationControllerのビューのサイズを変更し、それを親viewCntrollerのビュー(私はself.contentViewを持っています)に追加します。

BOOM !!ここ

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[self.contentView setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)]; 

mNavController =[[UINavigationController alloc]initWithRootViewController:myNestedRootController];/
[self.mNavController.view setFrame:CGRectMake(0, 0, self.contentView.bounds.size.width, self.contentView.bounds.size.height)]; 
[self.mNavController setNavigationBarHidden:YES]; //optional 
[self.contentView addSubview:self.mNavController.view]; 
} 

実際にあなたがcontentViewをスキップすることができますし、viewcontroller's view(私の悪い)上で直接mNavController'sビューを持って...コードである

私は(プッシュのみ)プッシュする方法を持っているA新しいVC

-(void)moveToContentViewController:(PM_BaseContentVC *)contentvc animated:(BOOL)animated{ 
[self.mNavController popToRootViewControllerAnimated:NO]; //silently pop the previous viewcontroller 
[self.mNavController pushViewController:contentvc animated:YES]; //push new viewcontrolelr 
[self.contentView addSubview:self.mNavController.view]; //add the view 
} 

sugestionsと最適化は歓迎されている:)

関連する問題