objective c synchronousrequest查询

时间:2013-10-27 12:15:20

标签: objective-c sendasynchronousrequest

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

我在按钮IBAction中使用以下代码启动上传

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

这有效地阻止我能够更新文本描述框(或任何屏幕参数),直到上传完成(根据我想的同步动作的性质)如何在上传开始之前更新一些屏幕参数(但仍然在IBAction按钮内)?

1 个答案:

答案 0 :(得分: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:...]