15

任何人都可以解释coredata故障是什么意思吗?我知道这是一种减少内存的机制。但我的问题是,如果当我们尝试使用错误对象时,我们是否需要调用任何刷新方法或者 CoreData 会为我们选择值?如果 CoreData 为我们处理它,如果故障对象从实际持久存储中删除并且我们尝试通过故障对象访问它会发生什么?它会抛出任何异常吗?

4

3 回答 3

25

在 Core Data 中,故障是占位符,或“未实现的对象”。它们是引用其他 NSManagedObjects 的小对象,仅在需要时才将其提取到内存中。这种故障机制旨在提高性能并减少内存使用。

一般来说,故障机制是透明的;当您从 NSManagedObjectContext (MOC) 中检索对象时,您无法分辨(在其正常使用过程中)它是故障对象还是已实现对象。在大多数情况下,当需要这样做时,例如在访问对象的属性时,Core Data 框架会自动将故障转换为已实现的对象(“触发”)。如果你需要自己触发一个错误,你可以通过调用它的 willAccessValueForKey: 方法和一个 nil 参数来实现。

于 2013-01-31T20:33:45.710 回答
5

Dhruv的好答案!在回答您的最后一个问题时,如果您尝试访问首先出现故障然后被删除的托管对象,您将看到 NSObjectInaccessibleException 和消息“核心数据无法完成故障”

于 2013-02-01T17:56:00.280 回答
3

来自 Coredata 参考(链接):

故障减少了应用程序消耗的内存量。故障是表示尚未完全实现的托管对象的占位符对象,或表示关系的集合对象。

于 2015-05-19T03:31:48.513 回答