Warning: Attempt to present 〜 on 〜 while a presentation is in progress!


警告が出るもよくわからず。。。

modalを

[self presentViewController:modalViewController animated:YES completion:nil];

で呼び出して、なんらかの処理をさせて、その後 delegate で戻ってきたところで

[self dismissViewControllerAnimated:YES completion:nil];

でmodalを閉じたりするんですが、そのときにタイトルに書いた


Warning: Attempt to present モーダル on 親のview while a presentation is in progress!

のような警告がでてきて悩んでました。

警告の意味がわからずgoogle先生にも聞いてみたところ、いつものstackoverflowさんが引っかかったのですが、それによるとmodalviewを開こうとしたら既にそのmodalviewは開かれている場合に出る警告ってことかな?
なぜこんな警告が出るんだろう。
そんなことをしているつもりはなくて、、、ちょっとよく意味が分からずしばらく放置していました。

原因が判明

この警告が出ていても一応正常に動いているように見えるし、他の箇所でmodalを表示しているところではこの警告は出てなかったりして、ほんと意味が分からず。
でも、別のバグ取りのためにステップ実行していたら理由が分かりました。

その理由というのが、viewWillAppear の中でmodalを表示させていたこと。

1. viewWillAppear が呼び出される
2. その中で presentViewController で modal を表示
3. delegateで戻ってきて dismissViewController で modal を閉じる
4. 再び viewWillAppear が呼び出される

modalの終了処理が終わる前にもう一度 modal を開こうとして警告が出ていたんだろうか。
もしかしたらそのままでもiOSが適切に対応してくれているのかもしれませんが、タイミングによっては大変なことになりはしないかとかなり心配だったので速攻で対処しました。

modalを閉じたときにも呼び出し元の viewWillAppear って呼ばれるんですね。
今まで知らなかった。
この警告で検索してもあまりヒットしないということは、常識なんだろうなぁ。
まだまだ力不足だなぁ。


2件のコメント: “Warning: Attempt to present 〜 on 〜 while a presentation is in progress!

    • お役に立ててよかったです。
      私は相変わらずつまずきっぱなしで、あちこちのサイト様にお世話になってます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>