【问题标题】:Core Data migrations requirements核心数据迁移要求
【发布时间】:2021-03-03 06:51:40
【问题描述】:

我有几个关于 Core Data 迁移的问题,我似乎无法找到答案。

  1. 我正在对我的 Core Data 模型文件进行一些小改动... 专门改变一些“变压器” 可转换的属性,从空白到 NSSecureUnarchiveFromData (摆脱关于 NSKeyedUnarchiveFromDataTransformerName)。我需要创建一个 新模型并为此进行轻量级迁移?或者这不是 影响模型中的任何内容?
  2. 在 Xcode12.2 中,如果我对模型进行了更改(例如添加属性或新实体),并且我不创建新的模型版本,只运行应用程序......它不会崩溃!它过去总是抛出“找不到源存储模型”错误。最近这方面有什么变化吗?还是我做错了什么?

谢谢。

【问题讨论】:

    标签: core-data core-data-migration


    【解决方案1】:

    Core Data 通过比较版本哈希来决定是否需要模型迁移。数据模型有一个,当您创建持久存储时,该版本哈希保存在存储文件中。只要它们不同,就需要迁移。迁移后,存储文件的哈希值会更新以匹配新模型。

    版本哈希唯一重要的是影响 SQLite 数据库设置方式的因素。如果更改某些内容意味着 SQLite 架构更改,那么版本哈希会更改。这不包括转换器名称。如果您对详细说明感兴趣,请查看NSEntityDescription、NSPropertyDescription、NSAttributeDescription 和NSRelationshipDescription 上的versionHash 属性

    如果您出于某种原因想要强制迁移,也可以添加自己的版本哈希修饰符字符串来强制更改版本哈希。

    对于简单的迁移,Core Data 比以前更加宽容。默认情况下,具有自动映射模型生成的轻量级迁移处于活动状态(shouldMigrateStoreAutomatically 和 shouldInferMappingModelAutomatically 默认情况下都是 true)。除非您专门将其关闭,否则轻量级迁移只会在需要时发生。保留不同的模型版本仍然是一个好主意,如果只是为了跟踪项目随时间的变化,但如果你不这样做,它通常也能正常工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多