1

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

4

1 回答 1

2

UI 更改需要在主线程上进行,而您的长时间运行的操作应该在后台线程上进行。

假设您的循环在后台线程中运行,您可以通过执行以下操作触发 UI 更新:

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

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

于 2013-04-05T15:59:54.040 回答