ios - 手动迁移 iCloud 核心数据

标签 ios core-data upgrade icloud

我有一个应用程序可以读取世界各地站点的风速读数。我决定通过鞋盒式应用程序来使用 iCloud 和 Core Data。

风读数每小时更新一次,在使用该应用程序几周后,我意识到这是一个坏主意,因为 iCloud/Core Data 刚刚填满了数兆字节的交易,而恢复设备需要 10 分钟才能将商店下载到新的设备。

我的解决方案是使用核心数据配置,以便“站点”存储在 iCloud 存储中,但每小时变化的“风读数”在 12 小时后被删除存储在本地存储中。如果更容易想象的话,它的工作方式类似于每小时更改一次的 RSS“站点”和“条目”。

这一切都很好,但我不知道如何为我的应用程序的 2.0 版本编写迁移代码。在阅读了配置的工作原理后,我不得不删除站点和风读数之间的父/子关系,并使用获取请求使用通用站点标识符 UUID 将它们链接起来。

这样做我假设我不能使用轻量级迁移?同时加载版本化的 .momd 模型文件只会给我最新的模型,所以我如何获取原始模型文件以加载商店并手动执行所有操作。

另一方面,这是否太复杂了,我最好删除 iCloud 支持,或者您推荐其他方法?

最佳答案

在这种情况下,您应该能够使用轻量级迁移。

原因是,就您的“iCloud”配置而言,您只是删除一个实体并删除一个属性(即删除一个表和一个列)。自动迁移可以很好地处理这个问题。

然而...

有个问题。它不会首先将您拥有的数据复制到“本地”配置。因此,您需要在迁移之前手动执行此操作。以下是基本步骤:

  1. 确定是否需要进行此迁移。
  2. 将sqlite文件复制到“local.sqlite”。
  3. 启动iCloud配置,这将删除读数。
  4. 启动本地配置,这将删除站点。
  5. 测试、测试、再次测试,并继续测试。

关于ios - 手动迁移 iCloud 核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14818237/

相关文章:

ios - 模仿 UITextView 的默认双击行为

ios - 怎么知道是哪个FBRequest发起了请求didLoad : method?

ios - NSFetchedResultsController swift 中的两个数组

ios - 核心数据子类不会自动生成

filter - 使用 solr.StandardFilterFactory 从新服务器上的现有核心升级 schema.xml 中的过滤器

ios - 如何连接到 UIContainerView

ios - 格式化为 MM :SS using NSDateComponentsFormatter

sql - Xcode 4 和核心数据 : How to enable SQL Debugging

deployment - Azure 升级域、域计数

Python 2.5 至 2.7