7

我在核心数据中有一对多的关系 b/w 对象。Like A==>>B(many objects) 所以 A 与 B 对象具有一对多的关系。我的问题是,当我获取 A 对象时,B 对象是否也被加载到内存中?如果否,那么它们何时加载?当我访问关系?

4

1 回答 1

6

在大多数情况下,它不会。这是一种在核心数据中称为故障的机制。当您请求尚未实现的对象(即加载到内存中)时,该框架会在后台处理实现错误。

故障处理是透明的——您不必执行获取来实现故障。如果在某个阶段访问了故障对象的持久属性,那么 Core Data 会自动检索该对象的数据并初始化该对象(请参阅 NSManagedObject 类参考以获取不会导致故障触发的方法列表)。这个过程通常被称为触发故障。如果你向 Department 对象发送一条消息来获取它的名称,那么就会触发错误——在这种情况下,Core Data 会执行一次获取来检索所有对象的属性。

因此,在您的示例中,如果您加载 A,Core Data 将使 B 实例出错(即不将它们加载到内存中),当您实际尝试访问 B 时,它会意识到错误(即加载到内存中)。

相反,有时您已经在内存中加载了对象并且您想“卸载”它们。这被称为将对象变成故障。

您可以使用 refreshObject:mergeChanges: 方法将已实现的对象变为故障。如果您将 NO 作为 mergeChanges 参数传递,则必须确保该对象的关系没有更改。如果有,然后您保存上下文,您将向持久存储引入参照完整性问题。

于 2013-02-27T12:58:16.720 回答