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

已上线Core Data项目新增数据表,是否需创建新版本?

Core Data新增数据表的版本处理指南

核心结论

新增数据表属于模型结构变更,必须创建新的Core Data模型版本,绝对不能直接修改当前已上线的模型版本。

原因

  • 已上线应用的用户设备中存储的是旧模型对应的持久化数据,直接修改现有模型会导致Core Data无法识别数据结构变化,轻则触发崩溃,重则丢失用户数据。
  • Core Data的轻量自动迁移依赖新旧模型版本的对比,只有存在明确的版本差异,系统才能自动完成数据迁移,无需用户干预。

具体操作步骤

  1. 在Xcode中选中你的Core Data模型容器文件(.xcdatamodeld)
  2. 通过菜单栏路径Editor > Add Model Version创建新版本模型,建议命名清晰(比如Model_v2)
  3. 将新模型版本设置为当前活跃版本:选中.xcdatamodeld文件,在右侧属性面板的「Model Version」下拉菜单中选择刚创建的新版本
  4. 在新版本模型里添加需要的数据表(实体),配置好对应的属性和关系
  5. 确保Core Data栈支持自动迁移,初始化NSPersistentContainer时添加以下配置:
    let container = NSPersistentContainer(name: "YourModelName")
    guard let storeDescription = container.persistentStoreDescriptions.first else {
        fatalError("Failed to retrieve store description")
    }
    // 开启自动迁移和自动映射模型
    storeDescription.setOption(true as NSNumber, forKey: NSMigratePersistentStoresAutomaticallyOption)
    storeDescription.setOption(true as NSNumber, forKey: NSInferMappingModelAutomaticallyOption)
    
    container.loadPersistentStores { storeDescription, error in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    }
    

发布新版本的注意事项

  • 保留所有历史模型版本文件,不能删除旧版本,否则部分从早期版本升级的用户会无法完成数据迁移。
  • 务必测试升级流程:安装旧版本应用并生成测试数据,再覆盖安装新版本,验证旧数据是否完整保留,新数据表能否正常读写。
  • 单纯新增数据表属于Core Data轻量迁移支持的场景,无需手动创建映射模型;如果还有其他复杂变更(比如属性类型修改、实体重命名),才需要额外处理映射关系。

内容的提问来源于stack exchange,提问作者Deepak Thakur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:35:26