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

Posted

技术标签:

【中文标题】快速核心数据迁移以更改属性类型【英文标题】:swift core data migration to change attribute type 【发布时间】:2020-01-04 21:34:23 【问题描述】:

我有一个 ios 应用程序,它有一个用于新闻的核心数据数据库。每个新闻实体都有一个 ID 属性,它应该是一个 Integer,但到目前为止,它是一个 String,我想将其更改为 Integer。

到目前为止我尝试过的步骤:

    创建了新的模型版本并将 ID 属性的类型从 String 更改为 Int 32 创建了一个映射模型,其中 ID 具有值表达式 FUNCTION($entityPolicy, "idToInt:" , $source.id) 定义了 NSEntityMigrationPolicy 的子类,其中我定义了上面提到的 idToInt 函数:
import CoreData

class ModelV2MigrationPolicy: NSEntityMigrationPolicy 
    func idToInt(old: String) -> Int32 
        return Int32(old)!
    

    通过将 Custom Policy 设置为 myapp.ModelV2MigrationPolicy 将迁移策略链接到映射模型

但如果我现在尝试运行我的应用程序,它会崩溃并出现以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:'-[myapp.ModelV2MigrationPolicy idToInt]:无法识别的选择器已发送到实例

任何想法如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是FUNCTION($entityPolicy, "idToInt:" , $source.id) 中的选择器错误。

根据您的方法func idToInt(old: String),选择器应为"idToIntWithOld:"

【讨论】:

现在我在 AppDelegate 的 container.loadPersistentStores 中得到一个没有信息的 EXC_BAD_ACCESS --> 有什么想法吗?

以上是关于快速核心数据迁移以更改属性类型的主要内容,如果未能解决你的问题,请参考以下文章

在核心数据中进行大量迁移后尝试保存数据

核心数据迁移:更改持久存储类型

如果我将模型中的属性类型从 NSString 更改为 NSDate,是不是需要核心数据迁移

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

核心数据轻量级迁移 - 何时版本?

迁移复杂的核心数据模型