核心数据迁移要求

Core Data migrations requirements

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

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

谢谢。

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

对版本哈希唯一重要的是影响 SQLite 数据库设置方式的因素。如果更改某些内容意味着 SQLite 模式发生更改,则版本哈希也会发生更改。这不包括转换器名称。如果您对详细解释感兴趣,请在 NSEntityDescription, NSPropertyDescription, NSAttributeDescription, and NSRelationshipDescription

上查找 versionHash 属性

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

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