如何在Objective-C中调用next方法之前更新UIView

时间:2013-04-08 07:01:12

标签: ios objective-c uiview

我正在尝试在开始下载数据之前在屏幕上更新我的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。

2 个答案:

答案 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"
      });
});
}