You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Core Data新增实体后模型版本迁移崩溃问题求助

问题分析与修复方案

核心问题

崩溃错误NSUnknownKeyException表明:迁移过程中尝试访问Item实体不存在的item键,这说明映射模型的关系配置有误。

具体排查与修复步骤

  1. 检查映射模型的关系映射

    • 打开Modelv1Tov2映射模型,选中Subitem实体的映射条目。
    • 在右侧面板切换到「Relationship Mappings」标签,找到关联到Item的关系(比如命名为item)。
    • 查看「Source Key Path」字段:如果这里填写了item,这就是错误根源——v1版本的Item实体根本没有这个键。
    • 修正:将「Source Key Path」改为self,表示直接关联源Item实体本身(对应Core Data的对象ID关联)。
  2. 验证模型版本的关系配置

    • 打开v2版本的Core Data模型,确认Item与Subitem的一对一关系配置正确:
      • Item实体的关系(如subitem)需指向Subitem,且逆关系设为Subitem的item关系。
      • Subitem实体的item关系需指向Item,逆关系设为Item的subitem关系。
  3. 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:54:39