在Core Data中添加新的独立实体是否需要模型版本控制?

时间:2016-03-28 11:53:10

标签: ios objective-c core-data

我想在我的项目中添加一个新的核心数据实体。我是否需要为此添加新的核心数据模型版本,否则它将在现有版本中运行?该实体是独立的,与其他先前定义的实体无关。

2 个答案:

答案 0 :(得分:1)

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

<强>更新

关于轻量级迁移的文章:

  

此外,Core Data支持:...更改实体层次结构

     
      
  • 您可以添加,删除,重命名实体
  •   
  • 您可以创建新的父实体或子实体,并在实体层次结构中上下移动属性
  •   
  • 您可以将实体移出层次结构
  •   
  • 但是,您无法合并实体层次结构;如果两个现有实体不共享源中的公共父级,则它们不能   在目的地共享一个共同的父母
  •   

如果您不使用版本控制,您将收到如下错误:

  

错误域= NSCocoaErrorDomain代码= 134100“(null)”   的UserInfo = {元数据= {       NSPersistenceFrameworkVersion = 641;       NSStoreModelVersionHashes = {           TestEntity1 =;       };       NSStoreModelVersionHashesVersion = 3;       NSStoreModelVersionIdentifiers =(           “”       );       NSStoreType = SQLite;       NSStoreUUID =“F16AD345-02FE-4E94-B11E-3BC337B16568”;       “_NSAutoVacuumLevel”= 2; },reason =用于打开商店的模型与用于创建商店的模型不兼容   userInfo字典{       metadata = {           NSPersistenceFrameworkVersion = 641;           NSStoreModelVersionHashes = {               TestEntity1 =;           };           NSStoreModelVersionHashesVersion = 3;           NSStoreModelVersionIdentifiers =(               “”           );           NSStoreType = SQLite;           NSStoreUUID =“F16AD345-02FE-4E94-B11E-3BC337B16568”;           “_NSAutoVacuumLevel”= 2;       };       reason =“用于打开商店的模型与用于创建商店的模型不兼容”; }

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

答案 1 :(得分:0)

在现有模型中添加新实体仍然可以正常使用您的项目, 但是 如果您的应用已经在App Store上运行,则应添加新的基于当前版本的模型版本,并将新实体添加到此版本,以便可以处理轻量级迁移。

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