そのため、ユーザーがボタンを押すと別のView Controllerが表示されるボタンを持つルートView Controllerがあります。この2番目のコントローラーには、ルートビューコントローラーに戻るだけの閉じるオプションと、ユーザーがタッチすると現在のビューコントローラーを閉じるボタンがあり、1秒間ルートビューコントローラーに戻り、別のビューコントローラーを表示します。私が使用する最初のコントローラーに移動します:
let vc = FirstController()
self.present(vc, animated: true, completion: nil)
そして、他のView Controllerで私がこれをやめるだけのボタンを選択するとき。
self.dismiss(animated: true, completion: nil)
したがって、別のコントローラーを閉じて表示する必要がある2番目のコントローラーについては、次のことを試しました。
self.dismiss(animated: true, completion: {
let vc = SecondController()
self.present(vc, animated: true, completion: nil)
})
しかし、エラーが発生します:
Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!
FirstControllerを閉じた後にFirstControllerからSecondControllerを表示しようとしているため、エラーが発生します。これは機能しません:
self.dismiss(animated: true, completion: {
let vc = SecondController()
// 'self' refers to FirstController, but you have just dismissed
// FirstController! It's no longer in the view hierarchy!
self.present(vc, animated: true, completion: nil)
})
この問題は、昨日の質問I answered に非常によく似ています。
シナリオに合わせて変更しました。これをお勧めします。
weak var pvc = self.presentingViewController
self.dismiss(animated: true, completion: {
let vc = SecondController()
pvc?.present(vc, animated: true, completion: nil)
})