【发布时间】:2016-03-28 11:53:10
【问题描述】:
我想在我的项目中添加一个新的核心数据实体。我是否需要为此添加新的核心数据模型版本,否则它将在现有版本中工作?该实体是独立的,它将与其他先前定义的实体没有任何关系。
【问题讨论】:
标签: ios objective-c core-data
我想在我的项目中添加一个新的核心数据实体。我是否需要为此添加新的核心数据模型版本,否则它将在现有版本中工作?该实体是独立的,它将与其他先前定义的实体没有任何关系。
【问题讨论】:
标签: ios objective-c core-data
确实,它需要添加一个新的模型版本。但是,添加新实体可以由lightweight migration 处理,因此至少您不必创建映射模型/编写自定义迁移代码。
更新:
来自关于轻量级迁移的文章:
此外,Core Data 支持: ... 更改实体层次结构
- 您可以添加、删除、重命名实体
- 您可以创建新的父实体或子实体并在实体层次结构中上下移动属性
- 您可以将实体移出层次结构
- 但是,您不能合并实体层次结构;如果两个现有实体在源中不共享一个共同的父级,则它们不能 在目的地共享一个共同的父母
如果你不使用版本控制,你会得到这样的错误:
错误域=NSCocoaErrorDomain 代码=134100 "(null)" 用户信息={元数据={ NSPersistenceFrameworkVersion = 641; NSStoreModelVersionHashes = { 测试实体1 = ; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( “” ); NSStoreType = SQLite; NSStoreUUID = "F16AD345-02FE-4E94-B11E-3BC337B16568"; "_NSAutoVacuumLevel" = 2; }, reason=开店的型号和开店的型号不兼容} 用户信息字典 { 元数据 = { NSPersistenceFrameworkVersion = 641; NSStoreModelVersionHashes = { 测试实体1 = ; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( “” ); NSStoreType = SQLite; NSStoreUUID = "F16AD345-02FE-4E94-B11E-3BC337B16568"; "_NSAutoVacuumLevel" = 2; }; reason = "开店的型号和开店的型号不兼容"; }
这对我来说似乎是使用版本控制的好理由)
【讨论】:
向现有模型添加新实体仍然适用于您的项目,但是如果您的应用已经在 App Store 上架,您应该添加一个新实体基于当前版本的模型版本并将新实体添加到此,以便可以处理轻量级迁移。
如果项目仍在开发中,添加或更改到当前模型就可以了。您可能需要删除并重新安装到您的设备上进行这样的更改,但正如我所说,如果它仍在生产中,这对您来说并不重要。
【讨论】: