2013-02-11 162 views
1

我有一个应用程序,可以读取世界各地的风速读数。我决定使用鞋盒式应用使用iCloud和Core Data。手动迁移iCloud核心数据

风读数每小时更新一次,使用应用程序几个星期后我意识到这是一个糟糕的主意,因为iCloud/Core Data只填写了数兆字节的事务并恢复设备需要10分钟将商店下载到新鲜的设备。

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

这一切都很好,但我不知道如何编写我的应用程序的2.0版本的迁移代码。在阅读配置的工作方式之后,我必须删除站点和风读数之间的父/子关系,并使用获取请求使用公共siteIdentifier UUID将其链接起来。

这样做我认为我不能使用轻量级迁移?同时加载版本化的.momd模型文件只是给我最新的模型,所以我如何获得原始模型文件来加载商店并手动完成所有工作。

另一方面,这是否太复杂了,我会更好地移除iCloud支持,或者有另一种方法可以推荐?

回答

1

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

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

但是...

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

  1. 确定是否需要执行此迁移。
  2. 将sqlite文件复制到“local.sqlite”。
  3. 站起来iCloud配置,这会删除读数。
  4. 站起来本地配置,这会删除网站。
  5. 测试,测试,再次测试并继续测试。
+0

感谢Marcus,您在Apple Developer论坛上重复浏览.momd内容的提示也非常有帮助。 [应用程序开发论坛帖子](https://devforums.apple.com/thread/179423?tstart=0) – Electron 2013-02-11 20:39:13

+0

我已经自动迁移现在工作。升级商店后是否可以挂钩通知? – Electron 2013-02-13 12:30:50

+0

只要您的代码通过'-addPersistentStore ...'迁移完成。没有额外的通知需要,因为'-addPersistentStore ...'块。 – 2013-02-13 16:34:50