dispatch_asyncの使用に問題があります。アプリケーションのメイン/UIスレッドで、グローバルキューでdispatch_asyncを呼び出し、完了ハンドラーを持つ関数呼び出しを実行するように指示します。完了ハンドラーが呼び出されることを期待していますが、表示されない場合があります。
dispatch_queue_t hiq = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(hiq, ^(void){
[object doSomethingAndThenCompletionHandler:^(){
//Do some stuff because I'm done
}];
});
興味深いのは、テキストフィールドに何かを入力するたびに、controlTextDidChangeに応答してこれを実行していることです。 テキストフィールドをクリックすると、すべての完了ハンドラーが一度に起動します。
私の推測では、すべての完了ハンドラーが実行ループの背後でキューに入れられ、UI要素がフォーカスを失うと、キューが解放されます。テキストフィールドまたはコンボボックスに入力しているときに何が起こっているのかを正確に知るには、実行ループの専門家ではありませんが、おそらく実行ループを拘束しているのでしょうか。
編集:実行ループモードを印刷すると、デフォルトモードとして出力する場合の完了ハンドラーを除いて、NULLとして出力されるため、実行ループモードと関係があると思います。コンボボックスを使用していますが、この問題は、コンボボックスを開いて展開した場合にのみ発生します。 UIScrollViewブロックはループを実行しますか? 私はそれがこの問題に関係しているかもしれないと思います。皆さんはどう思いますか?