无需多个数据模型版本即可完成迁移。欢呼?

Posted

技术标签:

【中文标题】无需多个数据模型版本即可完成迁移。欢呼?【英文标题】:Migration can be done without multiple data model versions. Hurrah? 【发布时间】:2016-08-29 13:27:18 【问题描述】:

我指的是关于核心数据迁移的精彩教程 Swift Core Data Tutorial。

tut 指出核心数据的迁移与数据模型的多个版本齐头并进。

我正在尝试轻量级迁移,并弄清楚以下几点:

场景 - 我有一个数据模型,我尝试向实体添加一些新属性,但出现错误 -

ios 版本 - 9.1 斯威夫特版本 - 2.2

"开店的型号和开店的型号不兼容 创建商店”

然后我尝试通过添加代码来启用迁移而不创建任何新版本 -

let options = [ NSMigratePersistentStoresAutomaticallyOption : true, NSInferMappingModelAutomaticallyOption : true ]

try persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: URLPersistentStore, options: options)

然后我尝试类似地更改数据库,即向实体添加属性并欢呼!!,它没有导致崩溃。即使我尝试访问特定实体和属性,但成功了。

发生的情况是没有多个版本的迁移。

问题 - 那么是否可以在没有多个版本的数据模型的情况下进行迁移?

示例代码链接 - https://www.dropbox.com/s/mnb2dzxn56ghuet/CoreDataSwift-NSFetchedResultsController-master-2.zip?dl=0

【问题讨论】:

什么版本的iOS? @TomHarrington 请检查已编辑的问题。 iOS 版本 - 9.1 【参考方案1】:

从 iOS 9 开始,Core Data 会将数据模型复制到持久存储,并在需要和请求轻量级迁移时将其用作起点。因此,即使旧模型版本不可用,也可以进行轻量级迁移。这仅适用于 SQLite 持久存储,并且仅适用于轻量级模型迁移。

这在 WWDC 2015 的 What's New in Core Data session 中有所描述。

【讨论】:

以上是关于无需多个数据模型版本即可完成迁移。欢呼?的主要内容,如果未能解决你的问题,请参考以下文章

考虑使用 Core Data 轻量级迁移的多个数据模型版本

核心数据版本控制 - 需要多个映射模型

在新版本的应用程序中替换核心数据模型,无需以前的源代码

iOS 核心数据轻量级迁移

核心数据模型版本控制和数据迁移

具有多个映射模型的复杂核心数据迁移