我有一个带有表视图的导航视图,当单击一行时,行索引路径将传递到下一个视图。
在详细信息视图 viewDidLoad 中,我正在从 Core Data 获取数据。我使用从应用程序委托中获取
[appDelegate loadItem:i];
正如你所看到的,我只传递一个带有行号的整数。
问题是:
我怎样才能在另一个线程中进行这个调用过程。(在后台)
我需要这个,因为有时获取的结果太大,所以处理需要 3 秒延迟推送详细信息视图。
我需要显示活动指示器三秒钟,因此我需要将 Fetch 放入另一个线程中,以便能够在处理 fetch 时使用指示器的 UI。
我想要最简单的方法,因为我是新手。发布一些代码会很棒。
或链接:)
混合多线程和 Core Data 并不是一项简单的任务。这《具有核心数据的多线程》 http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/CoreData/Articles/cdMultiThreading.html#//apple_ref/doc/uid/TP40003385Core Data 编程指南的 部分描述了如何在多个线程上与 Core Data 交互,包括所有需要注意的事情。
基本上,您需要为每个线程创建一个单独的托管对象上下文。这些上下文可以共享对一个托管对象模型和持久存储的访问。对于您的情况,他们建议如下:
您使用两个托管对象上下文
与单个持久性关联
商店协调员。你取一个
背景上的托管对象上下文
线程,并传递对象 ID
将对象获取到另一个线程。在
第二个线程(通常是
应用程序的主线程,以便您
然后可以显示结果),您使用
对象中出现故障的第二个上下文
与这些对象 ID(您使用
objectWithID:实例化
目的)。
听起来 BackgroundFetching 示例应用程序展示了如何执行此操作,但我的系统上没有它。
然而,在您对获取请求进行多线程处理之前,我会仔细研究一下为什么加载需要这么长时间。我首先建议在 NSFetchRequest 上使用 -setFetchBatchSize: 来限制通过 fetch 加载到内存中的对象数量(这也会节省大量内存)。接下来,我将使用 -setPropertiesToFetch: 将获取的属性限制为仅您将立即使用的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)