Core Data新增实体后模型版本迁移崩溃问题求助
问题分析与修复方案
核心问题
崩溃错误NSUnknownKeyException表明:迁移过程中尝试访问Item实体不存在的item键,这说明映射模型的关系配置有误。
具体排查与修复步骤
检查映射模型的关系映射
- 打开
Modelv1Tov2映射模型,选中Subitem实体的映射条目。 - 在右侧面板切换到「Relationship Mappings」标签,找到关联到Item的关系(比如命名为
item)。 - 查看「Source Key Path」字段:如果这里填写了
item,这就是错误根源——v1版本的Item实体根本没有这个键。 - 修正:将「Source Key Path」改为
self,表示直接关联源Item实体本身(对应Core Data的对象ID关联)。
- 打开
验证模型版本的关系配置
- 打开v2版本的Core Data模型,确认Item与Subitem的一对一关系配置正确:
- Item实体的关系(如
subitem)需指向Subitem,且逆关系设为Subitem的item关系。 - Subitem实体的
item关系需指向Item,逆关系设为Item的subitem关系。
- Item实体的关系(如
- 打开v2版本的Core Data模型,确认Item与Subitem的一对一关系配置正确:
确认Persistence.swift配置
确保自动迁移的代码正确(你当前的配置方向没问题,可核对细节):let container = NSPersistentContainer(name: "MigrateApp") guard let description = container.persistentStoreDescriptions.first else { fatalError("No persistent store description found") } description.setOption(true as NSNumber, forKey: NSMigratePersistentStoresAutomaticallyOption) description.setOption(false as NSNumber, forKey: NSInferMappingModelAutomaticallyOption) container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } })
额外提示
- 迁移前建议备份测试数据,避免数据丢失。
- 如果自定义映射模型仍有问题,可以先临时开启
NSInferMappingModelAutomaticallyOption测试自动推断的映射是否能成功,再对比自定义模型的差异定位问题。
内容的提问来源于stack exchange,提问作者Ivan C Myrvold
相关产品推荐
相关产品推荐

