私のiOSアプリケーションで奇妙な動作が検出されました。私は、セレクタとターゲットでdispatch_asyncを呼び出します。セレクタが呼び出されますが、ホームボタンをクリックするまでインターフェイスが更新されません。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
CMLog(@"Start Save RoundQuestions Asynchronously");
[round saveRoundQuestions:target selector:selector];
});
その関数それが仕事だ終了し、これを呼び出します:ログが正常に実行されているすべてのものを示して
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[target performSelector:selector];
#pragma clang diagnostic pop
、しかしターゲットはnavigationControllerにpushViewControllerを呼び出し、それが永遠にかかる私はこのコードを持っています実際のプッシュを行います。私はホームボタンをクリックすることでそれを強制することができます。私はおそらくスレッドの安全性に違反していると読んだことがあり、実行ループを起こす必要があるかもしれません。
dispatch_asyncからセレクタを呼び出すのは間違っていますか?または、UIがあるメインスレッドでセレクタを実行する必要がありますか?
EDIT:実際に問題を見つけました。私はsaveRoundQuestions内のUIをブロックしていた関数を呼び出していたことが判明しました。これは、プッシュアニメーションを強制的に行の裏側に押し付けていると考えています。私はこの機能をバックグラウンドに置き、プッシュアニメーションはすぐに起こります。しかし、なぜ私はまだ興味がありますか?あなたが使用してメインキューを取得する必要がありますので、
どちらの答えが正しいと働いていた、しかし、私は私が原因saveRoundQuestionsで重いプロセスの非同期を派遣して、私は賞に彼をつもりですので、他の答えは少し良く私の問題を理解すると思います。とにかくあなたはいくつかの衝突を持っているように見えます。 :) –
どちらもありがとうございます。それは私がDOHの瞬間だったので、私はそれがメインのキューで実行されていないことを知っていたので、少しだった。 –