核心数据迁移要求
Posted
技术标签:
【中文标题】核心数据迁移要求【英文标题】:Core Data migrations requirements 【发布时间】:2021-03-03 06:51:40 【问题描述】:我有几个关于 Core Data 迁移的问题,我似乎无法找到答案。
-
我正在对我的 Core Data 模型文件进行一些小改动...
专门改变一些“变压器”
可转换的属性,从空白到 NSSecureUnarchiveFromData
(摆脱关于
NSKeyedUnarchiveFromDataTransformerName
)。我需要创建一个
新模型并为此进行轻量级迁移?或者这不是
影响模型中的任何内容?
在 Xcode12.2 中,如果我对模型进行了更改(例如添加属性或新实体),并且我不创建新的模型版本,只运行应用程序......它不会崩溃!它过去总是抛出“找不到源存储模型”错误。最近这方面有什么变化吗?还是我做错了什么?
谢谢。
【问题讨论】:
【参考方案1】:Core Data 通过比较版本哈希来决定是否需要模型迁移。数据模型有一个,当您创建持久存储时,该版本哈希保存在存储文件中。只要它们不同,就需要迁移。迁移后,存储文件的哈希值会更新以匹配新模型。
版本哈希唯一重要的是影响 SQLite 数据库设置方式的因素。如果更改某些内容意味着 SQLite 架构更改,那么版本哈希会更改。这不包括转换器名称。如果您对详细说明感兴趣,请查看NSEntityDescription、NSPropertyDescription、NSAttributeDescription 和NSRelationshipDescription 上的versionHash
属性
如果您出于某种原因想要强制迁移,也可以添加自己的版本哈希修饰符字符串来强制更改版本哈希。
对于简单的迁移,Core Data 比以前更加宽容。默认情况下,具有自动映射模型生成的轻量级迁移处于活动状态(shouldMigrateStoreAutomatically
和 shouldInferMappingModelAutomatically
默认情况下都是 true)。除非您专门将其关闭,否则轻量级迁移只会在需要时发生。保留不同的模型版本仍然是一个好主意,如果只是为了跟踪项目随时间的变化,但如果你不这样做,它通常也能正常工作。
【讨论】:
谢谢。对于迁移,我做了一些研究,“模型缓存”从 WWDC2015 开始,适用于 ios9 / 10.11:developer.apple.com/videos/play/wwdc2015/220以上是关于核心数据迁移要求的主要内容,如果未能解决你的问题,请参考以下文章