繁体   English   中英

在后台获取核心数据

[英]Fetching Core Data in the background

我有一个带有表视图的导航视图,当单击一行时,行indexPath将传递给下一个视图。

在Details视图viewDidLoad中,我从Core Data获取数据。 我使用应用程序委托中的提取

[appDelegate loadItem:i];

正如您所看到的,我只传递一个带有行号的整数。

问题是:如何在另一个线程中进行此调用过程。(在后台)我需要这个,因为有时获取的结果太大,因此处理需要3秒延迟推送详细信息视图。

我需要显示三秒钟的活动指示器,所以我需要将Fetch放在另一个线程中,以便在处理提取时能够使用指示器的UI。

我想要最简单的方式,因为我是新手。 发布一些代码会很棒。 或链接:)

混合多线程和核心数据不是一项简单的任务。 核心数据编程指南”中的“使用核心数据进行多线程部分介绍了如何在多个线程上与Core Data进行交互,包括您需要注意的所有事项。

基本上,您需要为每个线程创建单独的托管对象上下文。 这些上下文可以共享对一个托管对象模型和持久性存储的访问。 对于您的情况,他们建议如下:

您使用与单个持久性存储协调器关联的两个托管对象上下文。 您在后台线程上获取一个托管对象上下文,并将获取的对象的对象ID传递给另一个线程。 在第二个线程(通常是应用程序的主线程,以便您可以显示结果)中,您使用第二个上下文来对具有这些对象ID的对象进行故障(使用objectWithID:来实例化对象)。

听起来像BackgroundFetching示例应用程序显示了如何执行此操作,但我没有在我的系统上。

但是,在你对获取请求进行多线程处理之前,我会仔细研究为什么加载这么长时间。 我首先建议在NSFetchRequest上使用-setFetchBatchSize:来限制通过fetch加载到内存中的对象数量(这也会为你节省大量内存)。 接下来,我将使用-setPropertiesToFetch:将提取的属性限制为仅用于您将立即使用的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM