【问题标题】:Does adding a new independent entity in Core Data require model versioning?在 Core Data 中添加新的独立实体是否需要模型版本控制?
【发布时间】:2016-03-28 11:53:10
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    确实,它需要添加一个新的模型版本。但是,添加新实体可以由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 = "开店的型号和开店的型号不兼容"; }

    这对我来说似乎是使用版本控制的好理由)

    【讨论】:

    • 如文档中所述,仅当实体中的属性发生更改时才会发生轻迁移。如果不对现有实体进行任何更改,我找不到与添加新实体相关的任何内容。您能否详细说明为什么这是必要的?
    • @atulkhatri,我已经更新了我的答案。 TL;DR:否则您将无法初始化核心数据堆栈(请参阅附加的错误消息)。
    • 除上述异常外,我没有遇到任何崩溃,可能是因为我在 AppDelegate 中启用了轻量级迁移。我可能会添加一个新的模型版本,只是为了更安全,如果我没有任何严格的理由说明它完全没有必要,因为我知道我的实体是相互独立的。
    • @atulkhatri,您的持久存储是否包含任何对象?如果没有,应用程序不会崩溃。尝试添加一些对象,保存上下文,然后更改模型(不创建新版本)并重新加载应用程序。它应该会崩溃。
    【解决方案2】:

    向现有模型添加新实体仍然适用于您的项目,但是如果您的应用已经在 App Store 上架,您应该添加一个新实体基于当前版本的模型版本并将新实体添加到此,以便可以处理轻量级迁移。

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

    【讨论】:

    • 回复@FreeNickname,我找不到与在轻量级迁移中添加新实体相关的任何内容。我的应用已在 App Store 上线。您是否建议版本控制只是为了更安全?
    • @atulkhatri,如果是为了 App Store 更新,那么是的,我建议添加一个新的模型版本
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 2023-01-19
    • 2015-11-09
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多