0

我正在尝试使用一些客观的 c 代码将图像和一些文本数据上传到我的网络服务器,这些都可以正常工作。我只是想在我的显示器上添加一个基本的进度指示“文本框”来显示进度,即说“上传”

我在按钮 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 回答