私のアプリはUINavigationControllerを使用してさまざまなUITableViewControllerを表示しています。ただし、非常に奇妙な動作があります。UITableViewControllerをナビゲーションコントローラーにプッシュすると、のアニメーションがNOpushViewController:animated:
に設定されている場合にのみ機能します。
[navController pushViewController:tableController animated:NO]
アニメーションをYESに設定すると、tableControllerビューが表示される前にアプリがフリーズします。この時点で例外やエラーはありません。最後に、を投げて数分後にアプリがクラッシュしEXC_??? (11) (code=0, subcode=0x0)
ます。しかし、これはどういう意味ですか?
いくつかの詳細情報:
すべてのコントローラーとビューはプログラムでロードされます。初め:
UITableViewController *tableController1 = [[UITableViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:tableController1]
[self.view addSubview:navController.view];
ボタンをクリックした後、tableController2は以下を使用して設定されます。
UITableViewController *tableController2 = [[UITableViewController alloc] init];
[navController pushViewController:tableController2 animated:NO];
// -> NO works, YES freezes
tableController2を分析するために、独自のtableViewControllerも作成しました。結果は次のとおりです。ボタンをクリックして2番目のテーブルビューコントローラをロードした後、までのすべてのメソッドviewWillAppear
が呼び出されます。viewDidAppear
は呼び出されず、ビューは表示されません。
誰かがこの問題を解決するための解決策を見つける方法を知っていますか?または何かアイデア、私のコードに何が欠けている可能性がありますか?たくさんのコードをコメントアウトして何時間もデバッグしても、まだ役に立ちませんでした...
編集:
コメントで述べたように、を置き換える方が良い[self.view addSubview:navController.view];
です。そこで、コードを変更し、ナビゲーションコントローラーのinitをappDelegateに移動しました。しかし、成功しなくても、同じ動作をします。
UITableViewController *tableController1 = [[UITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableController1];
NSArray* controllers = [NSArray arrayWithObjects:navController, ..., nil];
tabBarController.viewControllers = controllers;
tabBarController
アプリのrootViewControllerにすぎません。これは、ナビゲーションコントローラーとそのコントローラーに影響を与えるべきではありません。