【问题标题】:How to remedy data migration failure?数据迁移失败如何补救?
【发布时间】:2020-05-24 21:11:48
【问题描述】:

我想知道iOS App升级到新版本时数据迁移失败怎么办?既然App已经真正升级了,那是否意味着用户永远丢失了他的数据呢?用户、App 的开发者或 App 可以做任何事情来取回保存在旧模式中的数据吗?

我理解应用开发者应该尽一切可能避免这种情况发生。但是软件很容易出错,我不敢相信它从未发生过。在这些情况下人们是如何处理的?

我问这个是因为我正在编写一个具有复杂数据模式的应用程序。我希望在数据模式最初发布后,我可能会对它进行相当多的更改。如果发生这种情况,如果知道我能做什么就好了。

我还考虑在应用程序中提供一项功能,以应用程序特定格式将数据导出到文本文件,该文件使用高级描述语言并适用于不同版本的应用程序。但问题是iOS升级自动发生,用户不知道何时发生并导出数据。

【问题讨论】:

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


    【解决方案1】:

    由开发人员定义可持续的数据迁移流程。 应根据开发人员所做的更改类型采取方法。

    如果添加了一些新的属性、实体或关系,或者更改了它们的某些属性,只需提供新的模型版本就足够了。开发人员应确保在迁移后满足所有必需的关系。

    如果重命名关系,或者删除关系,例如,一对一关系以使其成为一对多关系,这种更改很可能容易出错。在这种情况下,在新的应用版本中,开发人员应该创建另一个适用于新架构的数据库,并将旧架构中的所有数据以新格式复制到其中。

    通过这种方式,即使 Xcode 在您升级时也能正常工作。例如,您可以通过~/Library/Developer/Xcode/iOS Device Logs 路径找到iOS 设备日志的数据库,并且每个数据库名称中都有Xcode 应用程序版本。 Xcode 将之前的数据库迁移到新的数据库中,而不是原位迁移之前的数据库。

    【讨论】:

    • 谢谢。我不知道可以同时访问多个数据模型,如果你不说,我永远不会考虑使用多个数据库。
    • 我认为您建议的第二种方法(将数据从旧数据库复制到新数据库)的另一个好处是它不会修改旧数据库中的数据。因此,如果它在某些极端情况下失败,我仍然可以制定一个更新的版本来再次迁移数据。相比之下,如果第一种方法(通常的方法)失败,它可能在修改数据时中途失败并使其无用。这种理解正确吗?
    • 对于新模式,您将创建适用于新数据模型的新持久存储。它不会是同一个数据模型的新版本,因为新版本的数据模型会自动触发迁移,并且会影响您从旧持久存储中获取数据的方式,并且可能会导致无法获取.
    • 我认为第二个用例是一种非常罕见的情况,仅当您大幅重构代码时才会发生这种情况,这种情况很少发生。因此,作为替代方案,您可以查看定义迁移应如何进行的映射模型。
    • 在本指南中,他们描述了轻量级迁移并提出了一本书,其中涵盖了更复杂的案例。我没有读过那本书,但你可以检查一下是否有帮助。 raywenderlich.com/…
    猜你喜欢
    • 2021-09-25
    • 2014-08-02
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2016-02-16
    • 2018-08-27
    相关资源
    最近更新 更多