1

json文字列をサーバーに送信するこのコードがあります

[NSURLConnection
 sendAsynchronousRequest:req
 queue:[[NSOperationQueue alloc] init]
 completionHandler:^(NSURLResponse *response,
                     NSData *data,
                     NSError *error)
 {

     if ([data length] >0 && error == nil)
     {

         NSLog(@"Done");

     }
     else if ([data length] == 0 && error == nil)
     {
         NSLog(@"Nothing was downloaded.");
         self.resultLabel.text=@"Done!";
         self.view.userInteractionEnabled = TRUE;
     }
     else if (error != nil){
         NSLog(@"Error = %@", error);
     }


 }];

非同期リクエストは正常に終了し、終了後すぐにログが表示されます。ただし、このコード:

self.resultLabel.text=@"Done!";
self.view.userInteractionEnabled = TRUE;

UI に表示されるまでに 10 秒ほどかかります。なぜこれが起こるのか知っている人はいますか?

4

1 に答える 1

12

すべての UI 変更をメイン スレッドで実行する必要があります。

....
if ([data length] == 0 && error == nil) {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.resultLabel.text=@"Done!";
        self.view.userInteractionEnabled = TRUE;
    });
}
....
于 2013-02-01T16:37:30.243 に答える