如何在发布更新时启用 iCloud 并迁移 Core Data?

Posted

技术标签:

【中文标题】如何在发布更新时启用 iCloud 并迁移 Core Data?【英文标题】:How do I enable iCloud and migrate Core Data on a release update? 【发布时间】:2014-01-12 06:31:18 【问题描述】:

我有一个使用 Core Data 但没有 iCloud 的 iPhone 应用程序的已发布 V1.0。 现在我想发布支持 iCloud 的 V2.0。

我使用https://github.com/mluisbrown/iCloudCoreDataStack/blob/master/iCloudCoreDataStack/PersistentStack.m 作为模板,一切似乎都正常。

因为之前的版本没有iCloud,新的有,所以我想在用户第一次打开新版本的时候将本地副本迁移到iCloud。

我该怎么做?我可以简单地将整个 sqlite 文件从本地复制到 iCloud 吗?架构在 1.0 和 2.0 之间是相同的。

我打算询问用户是否要使用本地 Vs。 iCloud(根据指南),但如果他们说是,我只想以某种方式进行批量复制。

谢谢

【问题讨论】:

【参考方案1】:

我刚刚发布了一个包含 iCloud 集成的示例 ios 库风格的 Core Data 应用程序。该应用程序包含一个设置包,供用户切换“使用 iCloud”首选项设置,并将根据用户设置将商店迁移到 iCloud 和从 iCloud 迁移。

从下面的链接下载 - 对文档感到抱歉 - 会在某个时候解决这个问题,但它的工作方式与 UIManagedDocument 示例大致相同。

http://ossh.com.au/design-and-technology/software-development/

【讨论】:

我需要时间来分析代码,但这个例子看起来正是我想要的。非常感谢【参考方案2】:

您不能批量复制,您必须使用适当的 API [NSPersistentStoreCoordinator migratePersistentStore:...][NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:...] 以及 iCloud 选项将商店迁移到 iCloud。我已尝试记录如何执行此操作(但示例使用 UIManagedDocument,尽管用于迁移到 iCloud 和从 iCloud 迁移的核心数据 API 保持不变)。

您不仅要检查用户偏好,还必须检查他们是否登录到 iCloud。此外,您必须迁移到 iCloud,然后如果用户更改首选项,您必须能够迁移回本地。因此,您必须在应用程序激活时检查用户是否更改了设置。这不是那么简单,但一旦你弄清楚所需的逻辑,它就不难了。

请参阅下面的链接以获取更详细的说明、示例代码和显示应用程序运行以及在本地和 iCloud 容器中创建/删除文件的视频:

http://ossh.com.au/design-and-technology/software-development/uimanageddocument-icloud-integration/

请记住,您必须从示例中删除 UIManagedDocument 特定代码。

【讨论】:

以上是关于如何在发布更新时启用 iCloud 并迁移 Core Data?的主要内容,如果未能解决你的问题,请参考以下文章

未启用 iCloud 时如何存储核心数据日志?

iCloud 和轻量级迁移

当涉及多个设备时,Core Data iCloud 迁移“丢失”数据

无法从 iCloud 迁移永久存储

iCloud 仅在应用启动时更新

在迁移时从 iCloud 迁移到本地商店崩溃的应用程序“对象不能为零” - 使用 Core Data