2012-01-20 11 views
0

私は、ユーザ入力によってトリガされる以下のコードの変形を持っています。合計ミステリー - iOSメソッドはランダムな遅延の後に実行されます

NSLog(@"WHY YOU iOS!!!"); 
[scanButton setSelected:YES]; 
[overlayImageView setImage:image]; 
[overlayView setHidden:YES]; 

上記のルーチンは、一見5秒から1分以上のランダムな遅延で実行されることがあります。

時々、NSLogメソッドを不思議なことを除いて、それらはまったく実行されません。 NSLog行にブレークポイントを設定すると、ただちに実行され、コンソールに "なぜ?"と表示されます。ただし、デバッガがエラーまたは警告なしで3行の下をスムーズに実行しても、次の3行の効果はランダムな遅延または無限の遅延の後に発生します。どうしましたか?ランダム遅延がどうして起こる可能性がありますか?

プログラムのデザインが悪いなどの理由で、Cocoa SDKのUI部分が中断していると思われますが、ランダムな遅延が発生しても、他のボタンや機能はうまく動作します。 iOS、または私の問題は何ですか?

画像パラメータ(UIImage *)が別のソースから来た場合、上記の正確なルーチンが遅れずに正常に動作するということです。その場合、問題の原因はイメージにあるとみなすことができますが、scanButtonとoverlayViewはイメージとは何の関係もないのに、同じ遅延で応答するのはなぜですか?私には完全な謎です。

+0

iOSでは何も問題ありません(iOSには問題はありませんが、おそらくこの部分はありません)。より多くのコードを表示してください - このコードはどこでどのように実行されていますか? –

+1

私がコーディングで学んだことは、どんな謎でも可能です。そしてあなたはいくつかの可動部分を無視しているので、それは謎のようです。あなたがすべての部分を一緒に置くならば、あなたは謎を解きます。そのデバッグと呼ばれる! – mbh

+0

@mbh。私はちょうどその問題を解決し、その謎の原因はコードではなく、コンパイラの働きがわからないということに気付いた。彼らは決定論的なオートマトンなので、彼らは神秘的ではありません。バグは私の頭の中にあった。さて、私は実際のコードをデバッグするために頭をデバッグする必要があります。とにかく、あなたの洞察に感謝します。 –

答えて

3

は、私はあなたが提供したコードにはほとんどのヒントがないので、起こっていただきました!には考えているが、あなたはこのような何かしようといけない理由:

dispatch_async(dispatch_get_main_queue(), ^{ 

     NSLog(@"WHY YOU iOS!!!"); 
     [scanButton setSelected:YES]; 
     [overlayImageView setImage:image]; 
     [overlayView setHidden:YES]; 

     [overlayImageView setNeedsDisplay]; 
     [overlayImageView setNeedsLayout]; 

     [scanButton setNeedsDisplay]; 
     [scanButton setNeedsLayout]; 

     [overlayView setNeedsDisplay]; 
     [overlayView setNeedsLayout]; 

}); 

を基本的にドを更新するために、常に確認してくださいメインスレッドのUI(バックグラウンドスレッドを使用している場合)と、必要に応じてUIコントロールを再描画するように設定します。

+1

すぐに応答しないUI固有の機能がある場合、その原因はほぼバックグラウンドスレッドで呼び出されていることが保証されます。私は@ Ecarrionがここで正しい答えを得たと思う。 –

+0

私はそれを試して、あなたに報告します。ありがとう。 –

+0

ありがとうございます。あなたは私のヒーローです。ランダム遅延はカスタムキューによって発生しています。上記のルーチンがキュー上で整列されたメソッドから呼び出されると、メインキューではなくカスタムキューのシーケンスに従い、ユーザのアクションにランダムな遅延で応答します。私はちょうど問題を解決し、あなたの答えにURLアドレスで、私たちのgit repoにコードをコミットしました。再度、感謝します。 –

関連する問題