2012-06-20 87 views
0

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

当用户按下按钮启动下载

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

的outputText下面的代码被触发的是,应该让用户知道发生了什么事情一个UITextView。

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

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

任何帮助非常赞赏,

感谢

吉姆

回答

2

是,更新用户界面将您的下载请求时被阻止。您可能需要调用之前等待[产品loadData:的outputText],可使用

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

完成并投入

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

该方法。

或者对于最佳做法,请在不同的线程或使用块开始下载。这允许您在下载过程中不断更新用户界面(请注意,只能在主线程/队列中更新用户界面)

+0

感谢您使用简单的“不是最佳实践”的方式。欢呼jx – jx12345

1

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

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

+0

感谢您的快速回复,在跳入下一行代码之前,主线程如何不完成对uitextview的更新? – jx12345