1. ホーム
  2. スクリプト・コラム
  3. その他

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

2022-01-11 23:42:26

質問

Xcode 4.5でコードの一部を実行したところ、ビューは問題なく表示され実行されましたが、コンソールに以下の警告が出力されました。

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

コードは次のとおりです。

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

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

解決方法は?

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

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


注意事項

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

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