最近有很多关于 iCloud 和 Core Data 的问题以及 Apple 的 API 目前在 iOS 5 和可能的 iOS 6 中如何被破坏的讨论。
考虑到 Apple 核心数据 API 的当前状态,是否有可能使用 iCloud 在多个设备之间可靠地同步?
如果是这样,你会怎么做?如果没有,请推荐一种替代方法。
这篇博文将引导您查看一系列最近的文章,这些文章介绍了尝试这种方法的开发人员的艰辛。
根据我自己的理解和经验,我相信这是可行的,但不要相信你会“免费”获得任何东西。根据您的数据模型,您最好将整个持久存储同步为文档,而不是使用记录的核心数据/iCloud 方法。
如果您已经习惯了 Core Data,您可能会有更好的运气。请确保您考虑过如何处理几个重要案件。
一个是如果用户退出他们的 iCloud 帐户该怎么办。发生这种情况时,将删除本地无处不在的持久存储。如果用户仍然可以访问他们的数据是有意义的,那么您需要在本地存储中管理一个副本,然后在他们重新登录时管理重新同步。
另一个是默认情况下更改的传播速度显然很慢,因此您可能需要考虑一种替代机制,例如键值存储,以快速传播足够的信息以避免不良的用户体验。
冲突管理可能是最具挑战性的(取决于您的模型)。虽然框架提供了一种通知您冲突的机制,但您需要自己提供一种机制来解决它们,并且有报告称冲突通知可能不可靠(请参阅链接文章),这似乎与滞后密切相关在更新中。
简而言之,如果您了解实际的支持是非常简单的,并且您需要非常防御性地编写代码,那么您可能会有机会。那里没有任何好的食谱,所以如果你做到了,请回来告诉我们什么有效!
这取决于你想做什么。有两种类型的 Core Data-iCloud 集成,如下所述:http: //developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html
从广义上讲,有两种类型的基于核心数据的应用程序与 iCloud 集成:
库风格的应用程序,其中应用程序通常具有单个持久存储,并且来自存储的数据在整个应用程序中使用。这种应用风格的例子是音乐和照片。
基于文档的应用程序,其中不同的文档可能在应用程序生命周期的不同时间打开。这种应用风格的例子是 Keynote 和 Numbers。
如果您使用的是库类型,那么本文是系列文章中的第一篇,该系列文章会涉及许多将出现的问题:http: //mentalfaculty.tumblr.com/post/23163747823/under-the-sheets -with-icloud-and-core-data-the-basics。
您还可以查看今年 wwdc 的会话 218(基于文档)或 227(用于库风格)。
从 iOS 7 开始,最好的解决方案可能是 Ensembles 框架:https ://github.com/drewmccormack/ensembles
此外,还有一个很有前途的项目,它基本上允许您使用不同的云服务来做同样的事情。
这是存储库的链接: https ://github.com/nohirst/TICoreDataSync
项目介绍:
TICoreDataSync 是一个类的集合,用于在 Mac OS X 或 iOS 下运行的任意数量的客户端之间通过基于核心数据的应用程序(包括基于文档的应用程序)的云(包括 Dropbox)实现同步。如果您需要通过尚不支持的选项进行同步,它的设计很容易扩展。
iCloud 当前不可靠的原因:
从这些来源引用和解释:
注意:我看过一篇文章,作者提到让它适用于 iOS 6+,但他们没有提供任何示例:http: //zaal.tumblr.com/post/46718877130/why-you-want-to -use-core-data-icloud-sync-if-only-it
作为参考,这里是 Apple 在 iCloud + Core Data 上的文档:
这是一个示例应用程序:
关于使用 iCloud API 操作文档的Apple 开发人员教程可能是一个不错的起点。
您的第三个 iOS 应用程序向您介绍了 iCloud 文档存储 API。您可以使用这些 API 在用户的 iCloud 存储中存储和操作文件。