2

さて、私は最初のログインビュー(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からの不必要な拒否の気分ではありません。

4

2 に答える 2

3

まったく同じエラーメッセージを取得する別の方法を発見しました。私は幸運!

ある時点でセグエを作成し、それをボタンに関連付けて([ボタン]-> [新しいビュー]をクリック)、後でそのセグエに名前を付けて、を使用して直接呼び出す場合

[self performSegueWithIdentifier:@"identifierName" sender:self];

次に、セグエを効果的に2回トリガーできるため、このエラーが発生する可能性があります。ボタンにIBActionを呼び出させると、最初に設定したセグエがオフになると思いましたが、明らかにそうではありませんでした。ボタンを押すとセグエが2回トリガーされましたが、セグエを削除して同じ識別子のビューで手動セグエとして再作成した後、上記のコードを介してセグエを呼び出すことができ、警告メッセージは表示されませんでした。

于 2012-09-26T18:11:36.170 に答える
0

フープラ!私の悪い。

ログインAPI呼び出しからの通知をばかげた方法で設定したようです。ユーザーがログイン(または再ログイン)をトリガーするたびに、通知のオブザーバーとして自分自身を追加しました。その結果、ログインが行われるたびにもう1つのセグエが実行されました。

そして、同時に複数のセグエを行うことは...まあ、明らかに悪いことです。

于 2012-09-26T10:17:54.783 に答える