1. ホーム
  2. ios

[解決済み] ウィンドウ階層にないビューを持つUIViewControllerでUIViewControllerを表示しようとする

2022-02-02 21:44:02

質問

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

警告 Attempt to present < finishViewController: 0x1e56e0a0 > on < ViewController: 0x1ec3e000> whose view is not in the window hierarchy!

ビューはまだ表示されており、アプリのすべてが正常に動作しています。これはiOS 6の新機能でしょうか?

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

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

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

解決方法は?

このメソッドはどこから呼び出しているのですか?このメソッドはどこから呼び出されるのですか? viewDidLoad メソッドを使用します。私の場合の解決策は、この呼び出しを viewDidAppear: というメソッドがあります。

私の推測では、ビューコントローラのビュー はありません。 が読み込まれた時点で、ウィンドウのビュー階層にある viewDidLoad メッセージが送信される)が、それは が提示された後、ウィンドウの階層にある(このとき viewDidAppear: メッセージが送信される)。


注意事項

を呼び出した場合 presentViewController:animated:completion: の中で viewDidAppear: を使用すると、ビューコントローラのビューが表示されるたびにモーダルビューコントローラが常に表示され(これは理にかなっています!)、モーダルビューコントローラの表示が消えないという問題が発生する可能性があります...。

これはモーダルビューコントローラを表示するのに最適な場所ではないのかもしれません。あるいは、表示するビューコントローラがモーダルビューコントローラをすぐに表示すべきかどうかを決定できるよう、追加の状態を保持する必要があるのかもしれません。