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

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

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

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

class ModelV2MigrationPolicy: NSEntityMigrationPolicy {
    func idToInt(old: String) -> Int32 {
        return Int32(old)!
    }
}
  1. 通过将 Custom Policy 设置为 myapp.ModelV2MigrationPolicy 将迁移策略链接到映射模型

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

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

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

【问题讨论】:

    标签: swift core-data


    【解决方案1】:

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

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

    【讨论】:

    • 现在我在 AppDelegate 的 container.loadPersistentStores 中得到一个没有信息的 EXC_BAD_ACCESS --> 有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多