更改某些实体中某些属性的类型后如何迁移核心数据模型?

Posted

技术标签:

【中文标题】更改某些实体中某些属性的类型后如何迁移核心数据模型?【英文标题】:How to migrate core data model after I changed types for some attributes in some entities? 【发布时间】:2015-10-29 13:10:02 【问题描述】:

好的,我有 6 个实体:WLCommentWLItemWLPortalWLSponsorWLUserWLWishlist。它们每个都有属性:标识符,类型为 Integer 16。现在我需要将每个实体的该属性的类型更改为 Integer 32

我知道我需要迁移 我知道我不能使用轻量级迁移,因为这种迁移类型不允许更改类型

这就是我在AppDelegate.swift 中设置核心数据堆栈的方式:

MagicalRecord.setupCoreDataStack()

我现在该怎么办?

【问题讨论】:

应用已经发布还是仍在开发中? @Fogmeister 应用尚未发布。 好的,首先,您需要从旧版本创建数据模型的新版本。应用程序发布后,您不能只更改模型。它需要保持不变。然后创建一个新版本,并对其进行更改。 我建议看一下教程之类的。 我有第二版核心数据。有教程吗? 【参考方案1】:

假设您已经拥有的数据模型版本是Version 1。我认为你应该:

    创建一个新版本的数据模型,比如Version 2。将 arrtibute identifier 设置为输入整数 16 将Version 2设置为当前模型版本 为Version 1Version 2 创建一个映射模型。 不要使用MagicalRecored.setupCoreDataStack()。相反,请改用setupAutoMigratingCoreDataStack()

【讨论】:

它在没有映射模型的情况下工作。你能解释一下为什么吗?有可能吗? 我没有测试它,但是如果它可以在没有映射模型的情况下工作,这意味着 Core Data 正在执行轻量级迁移,而不是默认迁移。当您将类型从 Integer 32 更改为 Integer16 时,也许 Core Data 可以自动推断出映射模型

以上是关于更改某些实体中某些属性的类型后如何迁移核心数据模型?的主要内容,如果未能解决你的问题,请参考以下文章

快速核心数据迁移以更改属性类型

如何从Core Data中的字符串获取Processed字符串

我应该如何迁移我的核心数据?

如何在迁移后更改D7中某些字段的字段类型

迁移后更改核心数据时崩溃

迁移复杂的核心数据模型