获取对象是否也会获取核心数据中的关系对象

时间:2013-02-27 12:50:29

标签: iphone ios

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

1 个答案:

答案 0 :(得分:6)

在大多数情况下,它没有。这是Core Data中称为Faulting的机制。当你要求一个尚未实现的对象(即加载到内存中)时,框架会负责实现场景背后的故障。

  

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

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

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

  

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