0

我有一个简单的目录应用程序,可让用户从管理网站下载产品数据。

以下代码在用户按下按钮开始下载时触发

- (IBAction)downloadProducts:(id)sender {
    outputText.text = @"Downloading data, please wait...";
    [Product loadData:outputText];
    outputText.text = @"Ok, download complete.";
}

outputText 是一个 UITextView,它应该让用户知道发生了什么。

Product 类中有一个静态方法来处理下载。这一切正常,唯一的问题是 uitextview 的输出会阻塞,直到下载完成。

IE。在 [Product loadData: outputText] 之后才显示“正在下载数据,请稍候...”消息;完成并立即被下载完成消息覆盖...

非常感谢任何帮助,

谢谢

吉姆

4

2 回答 2

2

是的,在您的下载请求期间更新 UI 将被阻止。在调用 [Product loadData:outputText] 之前,您可能需要等待,这可以使用

[self performSelector:@selector(someMethod:) withObject:nil afterDelay:1.0]; 

并放

[Product loadData:outputText];
outputText.text = @"Ok, download complete.";

在那个方法中。

或者为了获得最佳实践,请在不同的线程上或使用块开始下载。这允许您在下载期间不断更新 UI(请注意,更新 UI 只能在主线程/队列中完成)

于 2012-06-20T12:22:46.820 回答
1

由于您正在加载以响应用户操作,因此可能会在主线程上调用此方法。刷新屏幕只能在主线程上进行。因此,当主线程忙于加载您的数据时,它也不能绘制文本视图。

对此的一种解决方案是启动一个后台线程来进行加载。

于 2012-06-20T12:25:37.643 回答