ビューがウィンドウ階層にない UIViewController に UIViewController を表示しようとする 質問する

ビューがウィンドウ階層にない UIViewController に UIViewController を表示しようとする 質問する

Xcode 4.5 を使い始めたばかりですが、コンソールに次のエラーが表示されました:

警告: ビューがウィンドウ階層にない <ViewController: 0x1ec3e000> に <finishViewController: 0x1e56e0a0> を表示しようとしました。

ビューは引き続き表示され、アプリ内のすべてが正常に動作しています。これは iOS 6 の新機能ですか?

これはビューを切り替えるために使用しているコードです:

UIStoryboard *storyboard = self.storyboard;
finishViewController *finished = 
[storyboard instantiateViewControllerWithIdentifier:@"finishViewController"];

[self presentViewController:finished animated:NO completion:NULL];

ベストアンサー1

このメソッドはどこから呼び出していますか? メソッド内でモーダル ビュー コントローラーを表示しようとしたときに問題が発生しましたviewDidLoad。私にとっての解決策は、この呼び出しをメソッドに移動することでしたviewDidAppear:

私の推測では、ビュー コントローラのビューは、ロードされた時点 (メッセージが送信された時点)ではウィンドウのビュー階層にはありませんが、表示された後 (メッセージが送信された時点)にはウィンドウ階層にあります。viewDidLoadviewDidAppear:


注意

で を呼び出すと、presentViewController:animated:completion:ビューviewDidAppear:コントローラのビューが表示されるたびにモーダル ビュー コントローラが常に表示される (当然のことですが) という問題が発生する可能性があります。そのため、表示されているモーダル ビュー コントローラは消えません...

おそらく、これはモーダル ビュー コントローラーを表示するのに最適な場所ではないか、または、表示中のビュー コントローラーがモーダル ビュー コントローラーをすぐに表示するかどうかを決定できるように、追加の状態を保持する必要がある可能性があります。

おすすめ記事