2011-12-14 1 views
0

正常に動作しているアクティビティインジケータがあります。ほとんどの時間。しかし時にはそれはちょうど行くつもりです。コードはかなり広がっているので、私は説明しなければならないでしょう。UIActivityIndi​​catorの問題 - 時には停止しない

私は計算しています。時には更新が必要なだけなので、速いです。場合によっては時間がかかることがあり、サーバーから新しいデータを取得する必要があります。計算に時間がかかると、アクティビティインジケータが機能します。それが速ければ、活動インジケータは始動しますが、停止しません。アニメーションの最小時間はありますか?他に誰かがこれにぶつかっていますか?

私は、計算が最後に行われた時に基づいてstartAnimationをゲートする何かを試してみます。助言がありますか?

更新:OK。それは解決された。ロギング(示唆したように)は、startAnimatingへの2回目の呼び出しが発生し、競合状態に陥ることを示しました。計算が長くて、両方の呼び出しが停止前に到着することがありました。私は今、2番目の呼び出しを削除して、それは動作している!

答えて

2

私は、startAnimationの前にendAnimationを呼び出すか、まったくしないと思います。これらは、そのような問題の最も一般的な原因です。

これらの2つのメソッドを呼び出すと、NSLogを試しましたか?

+0

正しい順序で呼び出されています。私は声明の近くに記録したが、明らかに十分に近いものではなかった。私が近づくと、私は2番目の呼び出しを見つけました(更新された質問を参照)。 – Suz

4

メインスレッドからstopAnimatingに電話してもよろしいですか?メインスレッドでUIの変更を行う必要があります。そうでなければ、何も経験しません。奇妙な行動や遅れがあります。

stopAnimatingを呼び出す前にNSLogのようなものを入れて、すべてがメインスレッドから呼び出されていることを確認してください。それらは通常のスレッドで使用されているので、別のスレッドからUIの更新を行う

NSLog(@"main thread? %@", [NSThread isMainThread] ? @"YES" : @"NO!"); 

特にUIActivityIndi​​catorViewsのために、多くの場合、予期しない結果の理由です。

+0

計算は別のスレッド上にありますが、UIが一度に変更された場合は数値を処理していますが、他は正常です。しかし、このNSLogステートメントは知っていいです。 – Suz

1

このような状況では、基準カウントアクティビティインジケータを作成するのが好きです。基本的に、ネットワーク上で何か作業をするたびに、ネットワークアクティビティ数が増えます。それが終わったら、あなたは減少します。 0に達した場合は、停止します。 0より大きい場合は開始します。

+0

いいアイデア。私は次回それを試みます。 – Suz

+0

正確です。ステータスバーのネットワークインジケータと同じ方法を使用します。 – Sulthan

関連する問題