我正在尝试使用一些客观的c代码将图像和一些文本数据上传到我的网络服务器,一切正常。我只是想在我的显示器上添加一个基本的进度指示“文本框”来显示进度,即说“上传”
我在按钮IBAction中使用以下代码启动上传
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
这有效地阻止我能够更新文本描述框(或任何屏幕参数),直到上传完成(根据我想的同步动作的性质)如何在上传开始之前更新一些屏幕参数(但仍然在IBAction按钮内)?
答案 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:...]
。