我正在尝试在开始下载数据之前在屏幕上更新我的textView。现在,它只在所有下载完成后更新视图。如何在下载之前或之间进行此操作?
修改:我希望self.textView.text = @"Connection is good, start syncing...";
在下载开始之前更新用户界面。但是现在,它只在下载完成后才会更新。
这是代码的样子。
if ([self.webApp oAuthTokenIsValid:&error responseError:&responseError]) {
self.textView.text = @"Connection is good, start syncing...";
[self.textView setNeedsDisplay];
[self performSelectorInBackground:@selector(downloadCustomers:) withObject:error];
}
我是新手,还没有学习线程是如何工作的,但是根据我的阅读,downloadCustomers函数应该使用后台线程离开主线程来更新UI。
答案 0 :(得分:1)
此处的模式是在后台线程上初始化您的下载,然后回调主线程以进行UI更新。
以下是使用 GCD 的示例。 GCD 版本的优点是,您可以考虑使用-downloadCustomers
中的任何内容,在您调用它的位置插入内嵌。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self downloadCustomers];
dispatch_async(dispatch_get_main_queue(), ^{
[self.textView setNeedsDisplay];
});
});
答案 1 :(得分:1)
if ([self.webApp oAuthTokenIsValid:&error responseError:&responseError]) {
self.textView.text = @"Connection is good, start syncing...";
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self downloadCustomers];
dispatch_async(dispatch_get_main_queue(), ^{
//Do whatever you want when your download is finished, maybe self.textView.text = @"syncing finished"
});
});
}