HOME > > Warning: Attempt to present <ViewController: xxxxxx> on <HogeViewController: zzzzzzz> while a presentation is in progressのエラー

Warning: Attempt to present <ViewController: xxxxxx> on <HogeViewController: zzzzzzz> while a presentation is in progressのエラー

事象

画面遷移時に下記のエラーが表示されるようになってしまいました。

Warning: Attempt to present <ViewController: xxxxxx> on <HogeViewController: zzzzzzz> while a presentation is in progress

もっと具体的にいうと、モーダル表示しているカスタムのビューからのイベントで、モーダル画面をdismissで閉じるタイミングで、モーダル表示元のViewControllerに対してdeletate通知をして、そこでpresentで他の画面を表示させようとすると当該エラーが表示されます。

環境

  • Mac OS 10.12(Sierra)
  • Xcode 8
  • Swift 3.0

回答

このエラーは下記の状態のときに起きるようです。

  • dismissanimation:trueで実行している
  • 画面を閉じるアニメーションのタイミングで呼び出し元でpresentメソッドで新しい画面を表示させようとしている

なので、dismissのアニメーションが完了したタイミングでprezentを呼び出せばエラーは出なくなります。 色々やりかたがあるかと思いますが、sleepメソッドで0.5秒ほど停止してからprezentを実行すればいいと思います。 モーダル呼び出し元のViewController

        func デリゲートメソッド() {
            // 0.5秒待つ
            sleep(0.5) 
            // 画面表示
            present(HogeViewController, animated: true, completion: nil)
        }