我已经阅读了关于这个主题的几个主题,但还没有设法找到答案。
在我的iOS应用程序中,我使用sudzc.com提供的类从SOAP Webservice下载数据。然后我将数据保存到CoreData数据库。为此,我必须遍历数据集(for-loop)。由于可能有大量数据,我想为UI提供状态更新。
保存由WebServiceHelper类管理,该类定义将状态信息推送到视图控制器的委托。代理设置正确,因为某些消息正在显示,但我没有设法从循环内部更新视图或在一个长时间运行的方法中调用代理两次。
我试过了performSelector:withObject:afterDelay:
,但没有改变任何东西
有没有其他方法可以强制UI更新?
答案 0 :(得分:2)
UI更改需要在主线程上进行,并且长时间运行的操作应该在后台线程上。
假设您的循环在后台线程中运行,您可以通过执行以下操作来触发UI更新:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// update UI here
}];
这将在主runloop上执行块。另一种方法是使用GCD API,但如果可能的话,我喜欢留在Obj-C / Foundation级别。