Ios 在核心数据中添加新的独立实体是否需要模型版本控制?

Ios 在核心数据中添加新的独立实体是否需要模型版本控制?,ios,objective-c,core-data,Ios,Objective C,Core Data,我想在我的项目中添加一个新的核心数据实体。我是否需要为此添加新的核心数据模型版本,或者它将在现有版本中工作?该实体是独立的,它与以前定义的其他实体没有关系。事实上,它需要添加新的模型版本。但是,添加一个新实体可以由处理,因此至少您不必创建映射模型/编写自定义迁移代码 更新: 来自关于轻量级迁移的文章: 此外,核心数据支持:。。。更改实体层次结构 可以添加、删除、重命名实体 可以创建新的父实体或子实体,并在实体层次结构中上下移动属性 可以将实体移出层次结构 但是,不能合并实体层次结构;如果两个现

我想在我的项目中添加一个新的核心数据实体。我是否需要为此添加新的核心数据模型版本,或者它将在现有版本中工作?该实体是独立的,它与以前定义的其他实体没有关系。

事实上,它需要添加新的模型版本。但是,添加一个新实体可以由处理,因此至少您不必创建映射模型/编写自定义迁移代码

更新:

来自关于轻量级迁移的文章:

此外,核心数据支持:。。。更改实体层次结构

  • 可以添加、删除、重命名实体
  • 可以创建新的父实体或子实体,并在实体层次结构中上下移动属性
  • 可以将实体移出层次结构
  • 但是,不能合并实体层次结构;如果两个现有实体在源中不共享公共父实体,则它们不能共享 在目标中共享一个公共父级
如果不使用版本控制,则会出现如下错误:

错误域=NSCOCAERRORDOMAIN代码=134100“(空)” UserInfo={元数据={ NSPersistenceFrameworkVersion=641; NSStoreModelVersionHashes={ TestEntity1=; }; NSStoreModelVersionHashesVersion=3; NSStoreModelVersionIdentifiers=( "" ); NSStoreType=SQLite; NSStoreUUID=“F16AD345-02FE-4E94-B11E-3BC337B16568”; “\u NSAutoVacuumLevel”=2;},reason=用于打开存储的模型与用于创建存储的模型不兼容} 用户信息字典{ 元数据={ NSPersistenceFrameworkVersion=641; NSStoreModelVersionHashes={ TestEntity1=; }; NSStoreModelVersionHashesVersion=3; NSStoreModelVersionIdentifiers=( "" ); NSStoreType=SQLite; NSStoreUUID=“F16AD345-02FE-4E94-B11E-3BC337B16568”; “_NSAutoVacuumLevel”=2; }; reason=“用于打开存储的模型与用于创建存储的模型不兼容”;}


这似乎是使用版本控制的一个很好的理由)

将新实体添加到现有模型中仍然可以很好地用于您的项目,但是如果您的应用已经在应用商店中运行,您应该在当前模型的基础上添加新的模型版本,并将新实体添加到此模型中,这样就可以处理轻量级迁移


如果项目仍在开发中,添加或更改当前模型就可以了。您可能需要删除并重新安装到您的设备,并进行类似的更改,但正如我所说的,如果设备仍在生产中,这对您来说并不重要。

如文档中所述,仅当实体中的属性发生更改时,才会进行轻迁移。我找不到任何与添加新实体相关的内容,而不更改现有实体。你能详细解释一下为什么这是必要的吗?@atulkhatri,我已经更新了我的答案。TL;DR:否则,您将无法初始化核心数据堆栈(请参阅随附的错误消息)。我不会因上述异常而发生任何崩溃,可能是因为我在AppDelegate中启用了轻量级迁移。我可能会添加一个新的模型版本,只是为了安全起见,如果我不知道为什么不完全需要,因为我知道我的实体彼此独立。@atulkhatri,您的持久存储是否包含任何对象?如果没有,应用程序就不会崩溃。尝试添加一些对象,保存上下文,然后更改模型(不创建新版本)并重新加载应用程序。它应该会崩溃。正如对@Free昵称的回复,我找不到任何与在轻量级迁移中添加新实体相关的内容。我的应用程序在应用程序商店中实时运行。你建议版本控制只是为了更安全吗?@atulkhatri,如果是为了应用商店更新,那么是的,我建议添加一个新的模型版本