Core Data中的可变和不可变托管对象模型有什么区别?

时间:2014-03-02 13:33:24

标签: ios objective-c cocoa-touch core-data restkit

在阅读RestKit关于RKManagedObjectStore的文档后,我对createPersistentStoreCoordinator方法感到困惑,因为此方法的说明中有下一个警告:

**Warning:** Creating the persistent store coordinator will
render the managed object model    immutable. Attempts to 
use functionality that requires  a mutable managed object model 
after the persistent store coordinator has been created
will raise an application error.

我不明白它是什么意思immutable托管对象模型?我无法在官方Core Data文档或互联网上找到有关此主题的任何信息。有人可以解释一下mutableimmutable托管对象模型之间的区别吗?为什么创建持久性存储协调器会呈现不可变的托管对象模型?什么功能需要可变的托管对象模型?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在代码中更改NSManagedObjectModel(例如添加实体和属性),据说它是可变的。但是,一旦将对象模型附加到持久性存储协调器,就不允许再更改它 - 它已变得不可变。

NSManagedObjectModel的文档中也描述了这一点:

  

以编程方式编辑模型可管理的对象模型是可编辑的   直到它们被对象图管理器(托管对象)使用   上下文或持久存储协调器)。这允许您创建   或动态修改它们。但是,一旦使用了模型,它就会出现   不能改变。这是在运行时 - 对象时强制执行的   管理员首先使用模型获取数据,整个模型   变得无法控制。任何试图改变模型或任何模型的尝试   该点之后的子对象导致抛出异常。如果你   需要修改正在使用的模型,创建副本,修改副本,   然后用旧模型丢弃对象。