2013-01-08 195 views
10

我发现没有什么改变managedObjects relationshipCoreData迁移 - 删除

我最初coredata模型deletion rule的情况下约migration rules包含一个实体的关系关系的规则。这种关系的删除规则是cascade。我不得不改变这种行为Nullify

因此我创建了一个new version of my coredata model但没有任何轻量级迁移,它仍然有效。因此,如果我应该添加模型的新版本或者如果更改删除规则(例如,从cascadenullify)不影响/不需要任何迁移,我就应该做出决定。

有什么建议吗?

+0

没有轻量级迁移?所以在添加持久性存储时,您不使用“NSMigratePersistentStoresAutomaticallyOption”或“NSInferMappingModelAutomaticallyOption”? –

+0

不,我用下面创建我的商店:协调addPersistentStoreWithType:NSSQLiteStoreType 配置:无 网址:storeURL 选项:无 错误:错误] – Alexander

回答

16

删除规则指定运行时的核心数据的行为:如果一个对象被删除,其他关系可能被设置为NULL,或者相关对象也可能被删除。

因此,我认为删除规则仅存储在核心数据模型中,但不存储在持久存储文件中。

为了验证这一点,我已经从2个核心数据模型创建了2个存储文件,它们具有相同的实体,但具有不同的删除规则。在持久性商店metadata字典中的NSStoreModelVersionHashes是相同的。

事实上,两个SQLite文件都与“Z_METADATA”表中唯一的例外是“Z_UUID”,这是持久性存储文件的NSStoreUUID

另外,如果加载的商店的版本哈希与模型中的哈希不同,则addPersistentStoreWithType:...将会失败。

更改删除规则应该不成问题。

+0

这正是我经历 - 相同的哈希值。我只是在摆弄,因为在苹果文档中,我发现deleteRules应该是相关的:[...]对于每个实体中的每个属性,以下属性必须相同:name,isOptional,isTransient, isReadOnly, attributeType和关系destinationEntity,minCount, maxCount,deleteRule和inverseRelationship [...]!所以你不会为这个改变创建一个新版本吗?我没有看到任何新的优势...... – Alexander

+0

@亚历山大:我必须承认我没有查阅文档(你能给我的位置?),我只是按照描述测试过。你已经测试过'addPersistentStoreWithType:'工作,所以我没有看到问题。 –

+0

这里你去(底部的页面8):https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander