快速核心数据迁移以更改属性类型
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 --> 有什么想法吗?以上是关于快速核心数据迁移以更改属性类型的主要内容,如果未能解决你的问题,请参考以下文章