私のアプリでは、リモートサーバーと通信を行っていますが、これは遅い可能性があるため、そのコードを非同期で実行することをお勧めします。私はdispatch_asyncに渡すブロックに通信コードを持っています。このコードは通信を行い、通信が完了するとラベルのテキストを設定します。この最後の部分が問題です。テキストは設定されていますが、数秒遅れて発生します。これは私のコードです。
- (void)doNetworkingTask {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Slow network task goes here.
// Slow network task done, notify the user.
[self.myLabel setText:@"task done."];
NSLog(@"task done.");
});
}
ここで何が起こるかというと、私のネットワークタスクが完了し、NSLog-textがログに記録され、数秒後にラベルのテキストが更新されます。私の質問は1)ラベルテキストがすぐに更新されないのはなぜですか?そして2)私がやりたいことをする適切な方法は何ですか?(他に何もブロックせずに低速ネットワークタスクを実行し、完了したらテキストラベルを使用してユーザーを更新します。)