2013-11-25 9 views
5

私はバグテストしたアプリで問題が発生しました。私はバグを再現しようとする新しいプロジェクトを作成しばらくネストされたプッシュアニメーションiOS7バグ?

2013-11-25 09:02:55.687[186:60b] nested push animation can result in corrupted navigation bar 
2013-11-25 09:02:56.055[186:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2013-11-25 09:02:57.666[186:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview' 

:私は、私はこのエラーを得た理由を理解するために壁に頭を叩いた

私は2つを押し下げたときにこれがhappends異なるボタンが付いたアイテムを同時に選択し、同時に離します。私はセグを使ってストーリーボードを使っていますし、自己書いたコードはまったくありません。これはiOS7バグですか、何か不足していますか?

私は2つのカーソルを持っていないので、私は、シミュレータ上で再現することができていない...私はiPad2のを使用していますiOS7 7.0.3と

ストーリーボードの画像:

enter image description here

編集:私は強打と完全にも、このバグを再現して確認しようとして誰もせずにdownvotedてしまったので

、私は確認せずにそれを報告しました。

EDIT2:

Appleがスタックトレースを要求しました。しかし、私は彼らに再現するための正確なステップを与えて以来、私は気にしませんでした。それは私の仕事ではない。だから、これを報告してください。

+0

ボタンをクリックしようとするとバグがどのように生成されますか – codercat

+0

両方のボタンのボタン項目を押したままにします。同時にリリースします。 – ullstrm

+0

これはプログラミング上の問題ではなく、実際にはAppleのボード上にあるべきか、またはバグだと思われる場合はレーダー上にあるはずです。 – Fogmeister

答えて

0

これはおそらく、2つのセグを同時に呼び出すためです。ボタンを離すと、別のセグが完了する前に1つのセグを呼び出そうとします。

私が見ることができるのは、Xcodeが提示する警告は、View Controllerの1つがSegueによってトリガーされ、他のView ControllerのSegueが最初のView Controllerのロード終了を待つことなくトリガーされるためです。

最初のビューコントローラがロードされたときにチェックを行い、最初のビューコントローラが正しくロードされていることがわかったときに他のセグをトリガするような、ある種のコントローラを設定しようとすることができます。

+0

はい、私は自分のブール値フラグを使ってセグを手動で実行していて、安全かどうかをチェックしています。 Appleはバギーセグコードに行く。なぜ彼らはバグのときにストーリーボードのセグを使用するように促していますか? – ullstrm

+1

私がAppleの開発者ツールを使ってプログラミングしているときに遭遇した問題やバグの多くは、99.9%の時間で自分自身の誤りですので、Xcodeのバグには本当にコメントできません。 – Oskariagon

+0

これはまさに理由ですこれを投稿して、誰かがAppleにバグレポートを投稿する前に他の人が再現できるかどうかを確認します。 – ullstrm

0

私は、次の操作を行って、私のアプリで同じ問題を得ていた。 1つのログイン(セグエは、アニメーションを用いて行われる) 2すぐに新しい画面上の選択を行う(別のセグエを起動します)

をあなたがしようとした場合以前のトランジションアニメーションが完了する前にセグを実行すると、それはそれを台無しにすることがあります。だから、私はsegueを実行する前に遅延を追加し、それを修正するように見えました。 しかし、私はこれが最終的な解決策ではないと考えています。なぜなら、セグのアニメーションの持続時間はデバイスの速さによって異なるからです。

私は最高の解決策は、viewDidAppearの後にセグをトリガーすることだと思います。

0

私はちょうどそのようなものを実装しました。現在は機能しています。

私はビューコントローラA、B &を持っています。通常、ユーザはAからB、BからCまでナビゲートできますが、ユーザはAからC(Bまで)を自動的にナビゲートする方法を作成しました。

私がしたことは、Bで公開メソッドを作成してCを押すことでした。この方法は次のようになります。

- (void)pushC { 
    if ([self isViewLoaded] && self.navigationController.visibleViewController == self && ![self isBeingPresented] && self.didViewAppear) { 
     [self performSegueWithIdentifier:@"CSegue" sender:self]; 
    } 
    else { 
     [self performSelector:@selector(pushC) withObject:nil afterDelay:0.4f]; 
    } 
} 

すべては既にdidViewAppearプロパティから離れて与えられています。私が- viewDidAppearで真に設定したもの。

次に、ビューコントローラAの- prepareForSegueメソッドで- pushCに電話する必要があります。これまで見てきたように、彼は実際に次のセグを呼び出すのに適切な時間を待ちます。

これは問題なく動作しますが、必要のないすべてのナビゲーション遷移が表示されます。私はツリーをナビゲーションコントローラにプッシュできるようにしたいので、私は1つのトランジションナビゲーションしか持たないでしょう。さて、私は後でこの事に戻らなければならないと思う。

これはバグだとは思わないが、実際にはアニメーションが長くなったためiOS7の動作が変化したと言われている。

関連する問題