There has been a lot of discussion lately about the issues with iCloud and Core Data and how Apple's APIs are currently broken in iOS 5 and possibly iOS 6.
Is it possible, given the current state of Apple's Core Data API, to reliably sync across multiple devices using iCloud?
If so, how would you do this? If not, please recommend an alternative approach.
这取决于你想要做什么。 有两种类型的核心数据,iCloud的整合,如下所述: http://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html
有广义上来说,随着iCloud的整合两种类型的以数据为核心的应用:
图书馆风格的应用程序,其中应用程序通常有一个单一的持久存储,并从存储数据在整个应用程序中使用。 这种风格应用程序的示例是音乐和照片。
基于文档的应用程序,其中不同的文档可以在不同时间应用的生命周期期间打开。 这种风格应用程序的示例是主题演讲和数字。
如果你正在使用的库类型,本文是第一个系列进入了很多的问题,将拿出的: http://mentalfaculty.tumblr.com/post/23163747823/under-the-sheets -with-的iCloud和核心数据最基础知识 。
您还可以看看今年WWDC的会议218(以文档为基础的)或227(对于库式)。
此博客文章将带领您了解的开发商尝试这种方法的艰辛最近的文章链。
从我自己的理解和经验,我认为这是可行的,但不买的想法,你会得到什么“免费”。 根据您的数据模型,你可能会更好同步您的整个持久性存储为文档,而不是使用记录的核心数据/ iCloud的方法。
如果你已经熟悉核心数据你可能有更好的运气。 只要确保你思考如何处理一些重要案件。
一个是做什么,如果用户登录他们的iCloud帐户的。 发生这种情况时,当地的无处不在的持久性存储被删除。 如果它是有道理的用户仍然可以访问他们的数据,你需要管理本地存储的副本,然后管理,当他们重新登录重新同步。
另一个原因是,变化显然可以在默认情况下传播很慢,所以你可能要考虑一种替代机制,如键值存储,快速传播足够的信息,以避免糟糕的用户体验。
冲突管理也许是最有挑战性(取决于您的型号)。 虽然框架提供了一种机制来通知你的冲突,你是你自己提供一个机制来解决这些问题,有报道说,冲突通知可能不可靠(见相关报道),这似乎密切相关的滞后在更新。
总之,如果你去到这样的认识,实际的支持是很简陋,并且你需要非常防守的代码,你可能有机会。 有没有什么好的食谱在那里,所以如果你让它工作,请回来,并告诉我们什么工作!
由于iOS的7,最好的解决方案可能是合奏框架: https://github.com/drewmccormack/ensembles
此外,还有一个有前途的项目,该项目将主要允许你做使用不同的云服务同样的事情。
下面是仓库的链接: https://github.com/nothirst/TICoreDataSync
项目描述:
TICoreDataSync是类的集合,以使经由所述云(包括收存箱)的任何数量的在Mac OS X或iOS运行的客户端之间的基于数据的核心应用程序(包括基于文档的应用程序)的同步。 它的设计很容易,如果你需要通过一个尚未支持的选项,来同步扩展。
为什么icloud是不可靠目前原因:
- “有时候,icloud的只是失败将数据从一台计算机移动到另一个。”
- “损坏的基线是[A]共同障碍....没有从损坏的基线恢复,短期在深入了解当地的iCloud存储的内部结构和刮东西展现出来,并没有明显的迹象表明发生腐败 - 简单地同步停止“。
- “有时候,初始化的iCloud应用子系统的时候,它只会返回一个不透明的内部错误当出现故障时,没有选项恢复 - 所有你能做的就是再试一次(又一次...),直到它最后的作品。”
- “[W]母鸡您关闭了‘文件和数据’中的iCloud系统首选项同步,icloud的系统删除所有本地存储的iCloud数据[。]”
- 当你登出的iCloud,系统移动你的iCloud数据到一个位置应用程序的沙箱容器之外,应用程序不能再使用它。
- “在某些情况下(我们一直无法找出哪些,还),icloud的同步它。松散描述的,当实际上改变了对象类的项目,对象类确定在数据库中[该对象的类型。 ]”
- “在某些情况下(同样,不是所有的时间),iCloud中可以执行下列操作之一:
- 在项目的数据将指向错误的所有者所有者的关系;
- 业主项目迷失在同步和永远不会出现比他们所创建的其他计算机上。 (这导致该项目从未出现在UI任何其他机器上。)如果发生这种情况,伪造关系得到一滴项目和任意无关的所有者之间建立“。
- “有时候(没有任何明显的一致性和可重复性),对于对象的相关数据(例如,对于PDF项目的PDF数据,或Web归档项目的Web归档数据)将完全不能露面目标计算机上有时候它会到达后(晚得多 - 在数分钟或数小时)“。
报价,从这些来源转述:
- http://www.imore.com/debug-12-icloud-core-data-sync
- http://rms2.tumblr.com/post/46505165521/the-gathering-storm-our-travails-with-icloud-sync
注:我看到一篇文章,其中作者提到得到它的iOS 6+工作,但他们没有提供任何例子: http://zaal.tumblr.com/post/46718877130/why-you-want-to次使用的核-数据- icloud的同步-如果仅-它
作为参考,在这里是苹果在iCloud上+核心数据文档:
- http://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/
- http://developer.apple.com/library/ios/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/DesignForCoreDataIniCloud.html
- http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/vmCloud/vmCloud.html
这里是一个示例应用程序:
- http://developer.apple.com/library/ios/#DOCUMENTATION/General/Conceptual/iCloud101/Introduction/Introduction.html
在上使用iCloud的API来处理文档苹果开发者教程可能是一个良好的开端。
你的第三个iOS应用向您介绍了iCloud的文件存储API。 您可以使用这些API来存储和处理文件在用户的iCloud的存储。