Core Data 延迟加载对象,它应该在您尝试引用它们时立即引入任何对象。但是我遇到了这个方案的几个问题。
Objective C 2.0 对关系(集合)中对象的快速枚举可能会失败(因为集合中的对象尚未加载),并且在触及由核心数据管理的对象的成员之前不会调用 awakeFromFetch。
例如,如果我在 NSManagedObject 的子类中有关系,例如:
@property (retain) NSSet* clips;
在获取该对象的实例后,如果我尝试使用快速枚举,例如:
for (PClip* clip in self.clips) {
// do something with the clip
}
循环体永远不会执行。在调试器中,您可以看到剪辑集(运行时的 _NSFaultingMutableSet 实例)最初是空的。
或者说我有一个从持久状态派生的剪辑对象的非持久成员:
@property (retain) NSString* filename
我将其与 using awakeFromFetch 方法同步,但直到第一次调用对象的某个持久成员后才会调用 awakeFromFetch,因此如果某些代码在加载对象之前尝试访问此非持久值,则尚未定义(即为零)。
在获取请求上使用 setReturnsObjectsAsFaults: 方法似乎没有帮助。它似乎不会强制获取附加到所获取对象的所有对象树。
确保在使用对象之前加载对象的最佳方法是什么?为什么快速枚举无法导致对象集加载?