さて、私は最初のログインビュー(LoginVCという名前のビューコントローラー)を備えたユニバーサルiOSアプリを構築していますが、これは単純なUIViewControllerです。ログインが成功すると、アプリはナビゲーションコントローラー(MainNavigationVC)に接続します。このセグエはXCodeのストーリーボードGUIを使用して作成したため、navコントローラーのプログラムによる作成は行われません。navコントローラーは全画面表示でモーダルに表示されるため、アプリの残りの部分はログインビューの上で実行され、このnavコントローラーがすべての中心になります。
ナビゲーションコントローラーにはビュー(UserStartPageVCという名前のビューコントローラーを含む)が含まれており、ナビゲーションバーにはログアウトボタンがあります。このボタンは、navコントローラーを閉じて、ユーザーをログインビューに戻すことを目的として、ターゲットアクションをUserStartPageVCに送信します。
これまでのところ、すべてが正常に機能しています。ログインして、意図したとおりにアプリを使用できます。だが!ログアウトしてから再ログインすると、XCodeは次のように通知します。
警告!プレゼンテーションの進行中に、<LoginVC:0x756fcf0>で<MainNavigationVC:0x753110>を提示してみてください。
これは、ログインビューがMainNavigationVCナビゲーションコントローラーをモーダルに表示しようとしていることを意味していると思いますが、別のコントローラーは既に表示されていますよね?しかし、どのように?ビューを表示せずに表示できますか?
そして、ログアウトするときに古いnavコントローラーを取り除くにはどうすればよいですか?たとえば、モーダルビューを閉じるいくつかの方法を試しました。
実行中のUserStartpageVC内から
[x dismissViewControllerAnimated:YES完了:NULL]
[x dismissModalViewControllerAnimated:YES]
ここで、xはself、self.parentViewController、またはself.presentingViewControllerのいずれかです。
LoginVCをUserStartpageVCのプロパティとして設定し、実行する
[self.loginVC dismissViewControllerAnimated:YES完了:NULL]
等々。
テストされたすべての呼び出しは実際にログイン画面に戻るので、それは一種の機能です。
何か案は?必要に応じて、関連するコードサンプルを提供できますが、関心のある部分がわかりませんでした。ナビゲーションコントローラーへのセグにはコードがなく(performSegueWithIdentifier:sender :)を除いて、それを却下するためのコードは私がまっすぐに理解できない部分です。
補足として。これまでのところ、これは実際の問題ではありません。アプリが実行され、XCodeのエラーメッセージ以外の副作用なしにログアウトして再ログインすることが可能です。しかし、ユーザーが何度もログアウトしてログインすると、これはメモリリークになると思います。私は、Appleからの不必要な拒否の気分ではありません。