0

客観的なCコードを使用して、画像とテキストデータをWebサーバーにアップロードしようとしていますが、すべて正常に動作します。進行状況を表示するために、基本的な進行状況表示「テキストボックス」をディスプレイに追加しようとしていました。つまり、「アップロード中」と言っていました。

ボタンIBActionで次のコードを使用して、アップロードを開始しています

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

これにより、アップロードが完了するまで、テキストの説明ボックス (または任意の画面パラメーター) を更新できなくなります (同期アクションの性質によると思います)。ボタン IBAction 内)?

4

1 に答える 1

1

sendSynchronousRequest名前が示すように、同期であるため、現在のスレッドをブロックします。すべての UI 更新は、プログラム制御がメイン イベント ループに戻ったときにのみ行われるため、アップロードを別のスレッドに移動する必要があります。たとえば、次のようになります。

self.progressLabel.text = @"Uploading...";
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
        NSData *returnData = [NSURLConnection sendSynchronousRequest:...];

        // UI activity must be done on the main thread again:
        dispatch_async(dispatch_get_main_queue(),^{
            self.progressLabel.text = @"Done.";
        });
    });

または、 を使用することもできます[NSURLConnection sendAsynchronousRequest:...]

于 2013-10-27T13:02:15.887 に答える