whose view is not in the window hierarchy!が出た
タイトルの通り画面遷移のコードを書いていたところAttempt to present <***> on <***> whose view is not in the window hierarchy!が出ました。
初めてみたのでなんなのかわからず困りました。
問題が起きたコード
1個目の画面
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .green
self.present(SecondViewController(), animated: true, completion: nil)
}
}
2個目の画面
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .red
}
}
緑の画面から赤の画面に変わるだけです!いつもテスト用によくこんなコードを書いていた気がするのですが、画面の色が赤になりませんでした。
調べてみた
画面遷移は本来Viewを構築し終わった後、つまりviewDidLoad()が終わった後に行わなければいけないらしい。
つまり描画が完了したタイミングで画面遷移を呼び出すのが良みたい。viewDidApperをで呼べば解決!
以下のようにviewDidAppearで画面遷移を移行したところ正常に動きました
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .green
}
override func viewDidAppear(_ animated: Bool) {
self.present(SecondViewController(), animated: true, completion: nil)
}
}