由于核心数据迁移,应用程序在从应用商店更新后崩溃

Posted

技术标签:

【中文标题】由于核心数据迁移,应用程序在从应用商店更新后崩溃【英文标题】:App is getting crashed after updating from appstore becuase of Coredata migration 【发布时间】:2017-04-18 05:47:00 【问题描述】:

我的应用非常适合第一个版本 v1。

在第二个版本 v2 中,我在进行 coredata 迁移时犯了一个错误 - 我不小心在我的 coredata 中为实体(之前为空)提供了重命名 ID。因为更新时应用崩溃了,但新下载v2版本时它可以工作。

现在,我应该在我的下一个版本 v3 中做什么来修复这个崩溃?

如果我将实体的重命名 ID 替换为空,则从 v1 -> v2 -> v3 更新应用程序将起作用。

但如果用户新下载了 v2,它会再次崩溃。

请给我一些解决此问题的方法。提前致谢。

【问题讨论】:

【参考方案1】:

使用核心数据轻量级迁移。在应用程序开发的早期阶段,轻量级迁移特别方便,此时您可能会频繁更改托管对象模型,但您不希望不断重新生成测试数据。您可以迁移现有数据,而无需为用于创建需要迁移的商店的每个模型版本创建自定义映射模型。

核心数据必须能够推断映射

要执行自动轻量级迁移,Core Data 需要能够在运行时自行找到源和目标托管对象模型。 Core Data 在 NSBundle 的 allBundles 和 allFrameworks 方法返回的包中查找模型。如果您将模型存储在其他位置,则必须按照在无法自动找到模型时使用迁移管理器中所述的步骤进行操作。然后,Core Data 必须分析持久实体和属性的模式更改,并生成推断的映射模型。

为了使 Core Data 能够生成推断映射模型,更改必须符合明显的迁移模式,例如:

简单添加新属性 删除属性 非可选属性变为可选 可选属性变为非可选属性,并定义默认值 价值 重命名实体或属性

来源:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html

【讨论】:

我正在使用 coredata 轻量级迁移。我的问题是如何处理从 v2 到 v3 的迁移。从 v1 迁移到 v2 到 v3 将起作用。 您说刚下载 v2 版本时可以正常工作。如果您使用核心数据迁移,那么从 v2 迁移到 v3 时它应该不会崩溃。 您知道,我们必须在下一个版本中保持重命名 ID 不变。如果我省略 ID 并释放,它会崩溃。 查看这篇文章它会帮助你code.tutsplus.com/tutorials/…

以上是关于由于核心数据迁移,应用程序在从应用商店更新后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

轻量级核心数据迁移后崩溃

从应用商店更新后,iOS 应用在启动时崩溃

我没有在新版本中迁移NSPersistentStore,我可以通过应用更新进行恢复吗?

迁移后更改核心数据时崩溃

应用程序在从 Play 商店首次启动时崩溃

更新发布到应用商店后,iOS 应用程序用户崩溃 [复杂案例]