- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:viewWillAppear内での別画面表示)
viewWillAppear内での別画面表示
このQ&Aのポイント
- iPhoneアプリ開発を勉強している者です。少し詰まってしまった部分があるので、知恵を貸していただけるとありがたいです。
- アプリを起動した際に、ログイン設定を持っているかどうかを判定して、設定を持っていれば通常の初期画面(ViewController)を表示し、持っていなければその前にログイン画面(LoginViewController)を表示する、といった動きをさせようとしています。
- Unbalanced calls to begin/end appearance transitions forというエラーメッセージが吐き出されていて、調べてみると「viewDidLoad 内で他の viewController を表示しようとした場合に出るエラー」とのことでしたが今回の件には当てはまらず原因がよくわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 気になったのでちょっと確認してみましたが、 viewWillAppearのタイミングでperformSelectorOnMainThreadを 使っても、結局はUnbalanced callsのメッセージが出るようです。 やはりviewDidAppearになる前に別の画面に遷移しようとするのが まずいのだと思います。 viewDidAppearでなく、viewDidAppearのタイミングで 直接showLoginViewを呼び出せば、そのメッセージは出なくなります。 もし、ログイン画面が表示される前に初期画面が一瞬表示されるのが 気になるなら、親のViewControllerを作って、そのviewDidAppearの タイミングでログイン設定済みか判断して初期画面かログイン画面の どちらかに遷移するように設計すればよいと思います。 そもそもその前に画面遷移時のアニメーションをOFFにすべきだと思いますが。
その他の回答 (1)
- Lchan0211b
- ベストアンサー率61% (573/930)
回答No.1
少なくとも performSelectorInBackgroundじゃなくて performSelectorOnMainThreadにしないと まずいだろうと思います。 このコーディングだと、初期画面生成処理中に バックグラウンドで次画面生成処理が 同時に動いてしまいます。 基本的にバックグラウンドスレッドで GUI系の処理はしてはいけないと考えた方が いいです。
お礼
詳しくありがとうございます。 自分の方でも試してみましたが、やはりエラーは消えませんでした。 viewWillAppearでは出来ないんですね。。。 初期画面を一瞬見せる、というのはあまりやりたくないので、今回は後者の方向で進めてみたい思います。 具体的な方策まで、ありがとうございました。