2015-04-21 25 views
2

我有一个核心数据对象RootObject。 此对象有其他对象的数组/关系,ChildrenObject []执行NSFetchRequest时强制加载内存中的所有属性?

当执行NSFetchRequest让我所有的RootObject的I得到与他们的数组。

方式CoreData工作原理是,它只会加载按需性质,只有当意访问我ChildrenObject属性,属性会从文件加载。

喜欢的东西:

RootObject.childrenObjects.firstObject.someChildrenObjectProperty 

CoreData只会在属性的第一次访问加载someChildrenObjectProperty在内存中。

有没有办法迫使CoreData更早加载它,在NSFetchRequest执行的地方?

一种选择是通过所有的取RootObject项目的迭代,只是访问属性,但我想知道有没有一些更好的方法来做到这一点上CoreData水平(一些设置标志,取标志)。

+0

只是好奇,为什么你想这样做吗?我想不出一个合理的用例。 – Mundi

+0

RootObject是显示在UICollectionView中的照片。它有一系列的ChildrenObjects。我需要遍历该数组来计算一些东西,所以我可以知道如何基于此来显示我的单元格。当我启动应用程序并快速滚动收藏视图时,我注意到一个小小的呃逆。在下一次滚动一切都很好。我对该应用程序进行了剖析,并注意到在第一次滚动时,一些时间花在了ChildrenObject中。 someChildrenObjectProperty,所​​以我想这是第一次属性访问和CoreData正在从文件中读取它。 – vale4674

+0

因为我会在第一次滚动后以任何方式结束内存中的所有数据,所以我想从头开始预取,以避免第一次滚动打嗝。我可以优化这一点,以确保只预取我做过的ChildrenObject数组(setRelationshipKeyPathsForPrefetching)。其他选项是在每个OtherObject数组更改上计算此值,但我想要一个更快的解决方案,对我来说这很好。 – vale4674

回答

1

NSFetchRequest.returnsObjectsAsFaultsNSFetchRequest.setRelationshipKeyPathsForPrefetching