核心数据:重命名属性,不会出现用户及其当前数据的问题

时间:2016-09-08 13:02:59

标签: swift core-data

我只是想在我的桌面上重命名和添加属性以获取我的应用程序的新版本,如果已安装该应用程序,我想保留数据。

首先我只设置选项:

        let options = [NSMigratePersistentStoresAutomaticallyOption:true, NSInferMappingModelAutomaticallyOption:true]
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options)

我创建了一个新的版本模型,所以如果我重命名属性并在新模型上为我的表添加其他属性,那么应用程序会保留数据吗?

2 个答案:

答案 0 :(得分:3)

Per Apple的核心数据版本控制和迁移指南关于轻量级迁移的部分:

如果重命名实体或属性,则可以将目标模型中的重命名标识符设置为源模型中相应属性或实体的名称。您可以使用Xcode数据建模工具的属性检查器(对于实体或属性)在托管对象模型中设置重命名标识符。例如,您可以:  ...将Car的颜色属性重命名为paintColor

enter image description here

答案 1 :(得分:-1)

您的代码请求自动轻量级迁移。如果您想要重命名属性,那么迁移将不会保留该属性的数据。所有其他数据将被保留。核心数据会将其视为删除旧属性并添加新的无关属性。

如果要重命名属性并保留该属性的数据,则无法使用自动轻量级迁移。您需要创建一个映射模型来告诉Core Data如何迁移数据 - 具体来说,告诉它旧属性名称中的数据应该移动到使用新的属性名称。一旦你有多个版本的模式,你可以在Xcode中创建一个映射模型来设置它。整个过程在Apple's guide to model migration中进行了描述。