在后台获取相关的Core Data对象? (防止UI冻结)

时间:2012-03-24 21:53:01

标签: ios core-data

我目前正在使用一种方法,我在后台运行获取请求以获取对象ID,然后使用-existingObjectWithID:error:实例化它们。

问题是这些对象与大量对象有很多关系。当访问这些对象时,UI会冻结一段时间。 (可以一次访问它们。)

我猜相关的对象是错误的。我试图找出一种在后台预加载它们的方法。这个问题有解决方案吗?

3 个答案:

答案 0 :(得分:0)

setRelationshipKeyPathsForPrefetching:上尝试使用NSFetchRequest方法。传入一组键,这些键表示应该获取而不是出现故障的关系。

答案 1 :(得分:0)

您是否确定它是导致减速的主线程(确实听起来像这样) - 我会使用Instruments和“Time Profiler”来确定,并且还有一种方法{{3 }}

如果它是您的主要线程,那么有turn on SQL debugging/timing too(请看2010年,而不仅仅是2011年)如何优化核心数据。

答案 2 :(得分:0)

核心数据不是线程安全的。因此对于后台线程,您应该有单独的托管上下文。 通常核心数据不需要很多时间来加载。但是如果你要存储blob(比如图像数据),它可以达到性能。您应该使用要设置页面大小的NSFetchRequestController。它要快得多,所以你可能不必担心背景提取