【问题标题】:CoreData migrations without versioning无版本控制的 CoreData 迁移
【发布时间】:2018-05-05 09:47:04
【问题描述】:

现在我使用版本控制对数据库进行任何更改。但它带来了一些问题。例如,很难将具有新 db 版本的功能分支合并到 master/dev 中,其中有人还添加了新版本。

所以我的问题: 在不添加新版本的情况下更改单个 xcdatamodel 中的 db 是否安全?我试过了,它可以工作,但在互联网上的任何地方我都看到警告说你不能这样做。

iOS9+。

我发现了这个:https://stackoverflow.com/a/37264096/5328417 但它没有证据

【问题讨论】:

  • 您的应用在 App Store 中吗?
  • 描述您所做的确切更改。
  • @kirander 是的,它在 App Store 中
  • @TomHarrington 添加/删除表格,添加/删除列,重命名
  • 请参阅 2015 年第 220 场会议中的 WWDC video,大约从 2015 年 18 月开始。有一个关于模型缓存的讨论。

标签: ios core-data core-data-migration


【解决方案1】:

正如@pbasdf 所说,从 iOS 9 开始,您可以在不添加任何新模型版本的情况下进行轻量级迁移。源模型(以前的模型版本)被缓存以存储并用作轻量级迁移期间的最后努力。

我在自己的应用程序中成功使用了此功能。虽然我找不到这个记录。只是提到了WWDC video(18'15 模型缓存)。这正是 Core Data 有时如此神秘的原因。

【讨论】:

    【解决方案2】:

    如果您的应用处于开发阶段,那么您可以使用一种模型而无需版本控制。

    但如果它是在 App Store 上发布的,那么您必须在进行更改时创建版本(例如添加新属性、添加新实体、重命名属性等)。否则,Core Data 不会执行lightweight migration

    【讨论】:

    • 还有,执行迁移时会崩溃。
    • 你确定你在初始化Core Data Stack的时候通过了这些optionsNSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true
    • 你想说什么?
    • 查看@pbasdf 的评论。看起来它必须在不创建新版本的情况下工作
    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多