几年前,Apple 发布了 Core Data 应用程序的 iCloud 同步。然后我发布了一个适用于 iPad / iPhone / MAC 的应用程序,其共享模型使用新的 Apple 机制。
事情并没有按预期进行。同步机制有时不起作用。例如,就我而言,过去几个月很少能通过我的 3 台设备顺利完成同步。一般来说,上传对象效果很好。但是新的或删除的对象的下载过程通常会崩溃。
Apple 不久前发布了一种方法,强制设备重新下载模型的所有对象 (NSPersistentStoreRebuildFromUbiquitousContentOption),该方法通常可以工作,但它不是一个可接受的解决方案。
我的问题:有人已经成功让 iCloud + Core Data 正常工作吗?在 iOS 9 + El Captain 下运行 iCloud+CD 怎么样,有什么经验吗?
我正在评估迁移到新的 CloudKIT API,但我不喜欢在设备离线时自行管理对象上传的想法。指示模型更改的推送通知的新机制是否正常工作?
Thanks
这是我这几个月深入研究的一个问题,恐怕还没有明确的答案。
根据我的经验,我可以告诉你以下内容:
-
如果您像我一样不想重新开始使用 CloudKit,它工作可靠,但需要您手动处理大部分同步工作以及 CKRecords 到 ManagedObjects 的转换,请给Ensembles.io机会:它对我来说效果很好,Core Data 和 iCloud 之间的层在我的情况下确实有效,而 CD+iCloud 则不然。
我使用的是 1.0 版本,它是开源的,支持 iCloud 作为其可能的后端之一(2.0 版本是付费的,支持更多);几天后,我通过自动重复数据删除获得了可靠的同步(您必须提供 uniqueIdentifier 属性才能使其正常工作,但我已经有了一些东西......)。
我还没有弄清楚的唯一问题是:有时(我想说十有八九)一个对象在编辑或删除时不会立即同步,但当添加另一个对象时它总是会出现在另一台设备上、编辑或删除:没有任何丢失,并且当发生这些延迟时,所有内容都已“自动”为我处理,但我仍然希望所有内容始终立即同步。
Ensembles 还具有良好的调试日志记录功能,您会喜欢来自 vanilla CD+iCloud 的功能。
如果您想尝试一下,您应该查看以下资源:
- Ensembles.io 公司网站 http://www.ensembles.io
- Github 上的合奏 https://github.com/drewmccormack/ensembles
- Ensembles 创作者的演讲/介绍 https://vimeo.com/95398295
- 这篇文章和其他文章,在我在 Swift 项目中实现 Ensembles 后发现的博客上;如果我之前找到过这些信息,我本可以使用这些信息……但是如果您正在编写 Swift 代码,如果您是 Objective C,那么它们会更有用,那么官方的 Ensembles 书籍就是您的最佳选择 http://redwolftech.blogspot.it/2015/07/swifty-ensembles-part-1.html
-
如果你绝对确定你不想要 Core Data 和 iCloud 之间的层/第三方代码(我自己也是这么想的,但当我意识到我失去了三个月的生命并且没有得到任何回报时,我改变了主意) ,我在网上找到的、看起来更有前途的 Core Data + iCloud 的实现是:
- 具有 iCloud 集成的示例库风格核心数据应用程序,对我来说看起来有点复杂,但我读过很多好东西 http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/
- Tim Roadley 的书和示例代码 http://timroadley.com
我自己还没有尝试过这最后两个解决方案,因为我最后的攻击计划是尝试集成,如果它对我不起作用,请采用这些方法。由于 Ensembles 对我来说非常好,所以我不需要尝试它们,但它们看起来又很可靠。
最后一个让我困扰的想法是:2015 年 WWDC 会议上没有提到 Core Data + iCloud。对我来说,这对我们选择的同步解决方案来说意味着厄运。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)