ios - 数据迁移失败如何补救?
问题描述
我想知道如果iOS App升级到新版本时数据迁移失败怎么办?既然App已经真正升级了,那是否意味着用户永远丢失了他的数据呢?用户、应用程序的开发人员或应用程序可以做任何事情来取回保存在旧模式中的数据吗?
我理解应用开发者应该尽一切可能避免这种情况发生。但是软件很容易出错,我不敢相信它从未发生过。在这些情况下,人们是如何处理的?
我问这个是因为我正在编写一个具有复杂数据模式的应用程序。我希望在数据模式最初发布后,我可能会对它进行相当多的更改。如果发生这种情况,我最好知道我能做什么。
我还考虑在 App 中提供一项功能,以 App 特定格式将数据导出到文本文件,该格式使用高级描述语言并适用于不同版本的 App。但问题是 iOS 升级自动发生,用户不知道何时发生并导出数据。
解决方案
由开发人员定义可持续的数据迁移过程。应根据开发人员所做的更改类型采取方法。
如果添加了一些新的属性、实体或关系,或者更改了它们的某些属性,只需提供新的模型版本就足够了。开发人员应确保在迁移后满足所有必需的关系。
如果重命名关系或删除关系,例如一对一关系以使其成为一对多关系,这种更改可能容易出错。在这种情况下,在新的应用程序版本中,开发人员应该创建另一个适用于新模式的数据库,并将旧模式中的所有数据以新格式复制到其中。
通过这种方式,即使 Xcode 在您升级时也能正常工作。例如,您可以通过~/Library/Developer/Xcode/iOS Device Logs
路径找到 iOS 设备日志的数据库,并且每个数据库名称中都有 Xcode 应用程序版本。Xcode 将之前的数据库迁移到新的数据库中,而不是原地迁移之前的数据库。
推荐阅读
- excel - 如何循环遍历单元格值列表并将一个值应用于 Excel 工作表文件中的每个工作表
- python - Scipy/Numpy:将 cmap 应用于实际数据
- javascript - Firebase 中的快速路由响应带有 JSON 正文的发布请求的 500 错误
- python - 如何解决“ECitMatch() 参数 'bdata' 有多个值”?
- node.js - 如何使用加密库在 Node.js 中转换 TOR v3 私钥/公钥
- cron - Cron 作业有时会“错过 | 计划太晚了”有时会运行
- python - Python按多列排序二维列表未提供预期结果
- c - C - 在没有 malloc 的函数内填充通用结构
- c# - 尝试连接 LDAP 服务器并获取“可分辨名称包含无效语法”
- assembly - 在 cmpl $0x4, (%rsp) 之后 jg 做了什么?