web-dev-qa-db-ja.com

Storyboardを使用してXCode 4でモーダルな方法でビューをプッシュすると、「外観の遷移を開始/終了するための呼び出しのバランスが取れていない」警告

成功しなかったウェブでの調査の後、私はここに来て私の警告について質問します。

実際、ナビゲーションコントローラーを備えたビューV1があり、V1の読み込みが完了したときにモーダルビューV2をプッシュしたいと考えています。そこで、performSegueWithIdentifierメソッドを使用します(ストーリーボードを使用しています)。これが私のコードです:

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

コンパイルすると、次の警告が表示されました。

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x6849b30>

誰か助けてもらえますか?

26
Vinestro

-viewWillAppear:でセグエを実行しているため、対応する2つの-viewWillAppear:メッセージなしで2つの-viewDidAppearメッセージが生成されているようです。

-viewDidAppearでセグエを実行してみてください。

57
Mark Adams

「の外観遷移を開始/終了するための不均衡な呼び出し」

関連する最後のアニメーションが実行される前にアニメーションが開始されたと言います。それで、新しいものをプッシュする前にビューコントローラをポップしていますか?またはルートに飛び出る可能性がありますか?はいの場合は、アニメーションなしで実行してください。つまり、[self.navigationController popToRootViewControllerAnimated:NO];

これで問題が解決するかどうかを確認します。私の場合、これでうまくいきました。

5
infiniteLoop

私はこの問題を抱えていましたが、私がやったことはUIViewControllerについてですUIButtonからセグエをリンクし、それをnextBtnPressed:関数なので、実際には1つのボタンを押すことで2つの新しいUIViewControllersを押していました。それを1つのセグエに限定することで修正しました。しかし、私がこれを2倍にしたことを確認するには、調査が必要でした。

5
DonnaLea

この理由は多種多様であり、コンテキストとプログラミングに非常に固有です。たとえば、私がやっていたことは

  1. サウンドファイルを初期化し、それを(非同期で)1.4秒間再生します。
  2. 1.4秒続くアニメーションを使用して画像を画面上で移動させ、
  3. ステップ2の後にタイマーを1.4秒に設定して、ビューコントローラーを押します。

私が発見したのは、これらの3つの手順を順番に説明していない場合(混同している場合)、「Unbalanced Calls ...」というエラーが発生することです。また、ビューコントローラーのプッシュの時間を1.4秒未満にすると、メッセージも表示されます。

したがって、プログラム命令のシーケンスとタイミングが正しいことを確認してください。

1
Anjaan