2013-04-05 44 views
1

我已阅读有关此主题的多个主题,但尚未设法找到答案。 在我的iOS应用程序中,我使用sudzc.com提供的类从SOAP Webservice下载数据。然后我将数据保存到CoreData数据库。为此,我必须遍历数据集(for-loop)。由于可能有很多数据,我想向UI提供状态更新。 保存由WebServiceHelper类管理,该类定义委托将状态信息推送到视图控制器。代理设置正确,因为一些消息正在显示,但我没有设法更新循环内的视图或在一个长时间运行的方法中调用委托两次。
我试过performSelector:withObject:afterDelay:但这并没有改变任何东西。
有没有其他的方式来强制用户界面更新?从循环更新视图

+0

UI更改需要在主线程上执行,并且您的长时间运行操作应该位于后台线程上。为了从后台调度UI更新,你可以像'[[NSOperationQueue mainQueue] addOperationWithBlock:^ {// //在这里更新UI]];'' – 2013-04-05 15:59:25

回答

2

UI更改需要在主线程上执行,并且您的长时间运行操作应该位于后台线程上。

假设你的循环在后台线程运行时,可以触发UI更新通过做这样的事情:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
    // update UI here 
}]; 

这将执行在主runloop块。另一种方法是使用GCD API,但如果可能的话,我喜欢留在Obj-C/Foundation级别。