在保持UI响应的同时向核心数据添加大量数据

时间:2011-04-03 12:07:32

标签: iphone objective-c multithreading ios core-data

我正在寻找一种方法,将一大堆数据添加到核心数据,同时保持小活动指标在UI上旋转。我尝试在另一个线程上添加数据,但是因为我知道核心数据不是线程安全的,所以我得到了各种错误。任何人都可以建议另一种方法吗?

提前致谢。

4 个答案:

答案 0 :(得分:2)

核心数据不是线程安全的,但这只是意味着你必须适当地编码,而不是完全避免它们。为了保持您的UI响应/最新,您需要使用线程。

Apple关于这个主题的文档是here,而this blog post是使用Core Data的多个线程的一个很好的演练,以及一些陷阱。

答案 1 :(得分:0)

您需要为每个线程使用单独的托管对象上下文。您需要做一些额外的工作才能从主线程的上下文中获取其他上下文的更改:请参阅Concurrency with Core Data进行完整讨论。

答案 2 :(得分:0)

最有用的示例是从iOS示例代码下载的核心数据XML。如果你没有访问权限,请告诉我,我在这里写的是它的主要结构。 从UIviewController到nsoperation委托有一个复杂的自定义委托技术,这对于你开始向用户显示内容并显示同步进度非常重要。 在AppStore中,您可以看到我的“雪IXC”应用程序,您可以在其中看到实现此技术,以在UIviewController中指示用户有关进度的信息。它可以免费下载。

答案 3 :(得分:0)

这就是我如何通过加载指示器避免后台线程(我使用DSActivityView但这应该适用于其他实现):

在您的代码中,当您要显示指示符时,运行所有代码以首先显示指标。在那段代码之后有一个单独的方法调用来完成所有的加载工作。使用以下方法调用它:

[self performSelector:@selector(loadMethodName) withObject:nil afterDelay:0.0];

通常,应用程序将直接进入加载代码,而无需等待显示指示器视图。通过这种方式调用它,它将首先完成显示指针,然后才能进入加载代码。