iPadやiPhone用のアプリケーションを開発しているときに、ひどく厄介な問題が発生しました。
ナビゲーションコントローラー(ストーリーボードで設定)に、詳細情報を表示するビューコントローラーをプッシュさせたい。
次のコードはかつては機能していましたが、iPhoneでコントローラーを押すと画面が真っ暗になり、iPadでもまったく同じコードが正常に機能します。使用されるすべてのコントローラーはnil以外の値です。何が起こるかというと、navigationControllerを使用してビューを変更するための通常のアニメーションが表示されますが、その後は黒い画面しか表示されません。
ADetailViewController* detailController =
[self.storyboard instantiateViewControllerWithIdentifier:@"ADetailViewController"];
exposeController.data = aRealEstate;
exposeController.appData = self.appData;
[self.navigationController pushViewController: detailController animated:YES];
コードを少しデバッグして、ADetailViewControllerクラスのviewDidLoadが呼び出されているのに、viewDidAppearが呼び出されていないことに気付きました。これは、詳細ビューが表示されていることを意味します(黒い画面からもわかりました:-))
この問題に関するヒントをいただければ幸いです。
アップデート
私はなんとか自分で問題を解決することができました。これの原因は、デリゲート依存関係に組み込んだ循環依存関係でした。これは、rootViewが非表示になるときに、プッシュされたビューをポップするために使用されていました。