【问题标题】:iCloud + Core Data today (10th july 2015)今天的 iCloud + Core Data(2015 年 7 月 10 日)
【发布时间】:2015-09-28 15:38:46
【问题描述】:

几年前,Apple 发布了 Core Data 应用程序的 iCloud 同步。然后我发布了一款适用于 iPad / iPhone / MAC 的应用程序,该应用程序使用新的 Apple 机制共享模型。 事情并没有像预期的那样发展。同步机制有时不起作用。例如,就我而言,最近几个月,我的 3 台设备很少能顺利完成同步。上传对象通常可以正常工作。但是新的或删除的对象的下载过程通常会崩溃。 Apple 前段时间发布了一种强制设备重新下载模型的所有对象(NSPersistentStoreRebuildFromUbiquitousContentOption)的方法,该方法通常可以正常工作,但这不是一个可接受的解决方案。

我的问题:是否有人已经让 iCloud + Core Data 正常工作? iOS 9 + El capitan 下运行 iCloud+CD 怎么样,有什么经验吗?

我正在评估迁移到新的 CloudKIT API,但我不喜欢在设备离线时自行管理对象上传的想法。指示模型更改的推送通知的新机制是否可以正常工作?

谢谢

【问题讨论】:

  • iOS 9 仍处于测试阶段,规范可能会每天都在变化……今天可以使用并不意味着明天就可以使用,直到第一个 GM 发布。
  • 我想你还没有回答我的任何问题
  • 我的想法是:我认为没有人会给出明确的答案,因为给出的答案可能会在任何时候变得无效。

标签: core-data synchronization icloud cloudkit ensembles


【解决方案1】:

这是我这几个月来深入研究的一个问题,恐怕没有明确的答案。

我可以从我的经验告诉你:

  1. 如果您像我一样不想重新开始使用 CloudKit,它工作可靠,但需要您手动处理大部分同步工作以及将 CKRecords 转换为 ManagedObjects,请提供 Ensembles.io 一个机会:它对我来说非常有效,Core Data 和 iCloud 之间的层在我的情况下确实有效,而 CD+iCloud 没有。 我使用的是 1.0 版本,它是开源的,支持 iCloud 作为其可能的后端之一(而 2.0 版本,付费,支持更多);几天后,我通过自动重复数据删除获得了可靠的同步(您必须提供一个 uniqueIdentifier 属性才能使其正常工作,但我已经准备好了一些东西......)。 我还没有弄清楚的唯一问题:有时(我会说 10 例中有 1 例)一个对象在编辑或删除时不会立即同步,但是当另一个对象添加时它总是会在另一台设备上,编辑或删除:当这些延迟发生时,一切都没有丢失,一切都为我“自动”处理,但我仍然希望一切都立即同步。 Ensembles 也有一个很好的调试日志,你会喜欢来自 vanilla CD+iCloud 的东西。 如果你想尝试一下,你应该看看这些资源:

  2. 如果您绝对确定不希望在 Core Data 和 iCloud 之间使用层/第三方代码(我自己也是这么想的,但当我意识到我失去了三个月的生命却一无所获时,我改变了主意作为回报),我在网上找到并看起来更有希望的 Core Data + iCloud 实现如下:

我自己还没有尝试过这最后两种解决方案,因为我最后的攻击计划是尝试 Ensembles,如果它对我不起作用,就采用这些方法。由于 Ensembles 对我来说非常好,我不需要尝试它们,但它们再次看起来很可靠。

最后一个困扰我的想法是:在 2015 年的 WWDC 会议上,没有提到 Core Data + iCloud。对我来说,这意味着我们选择的同步解决方案注定要失败。

希望这会有所帮助。

【讨论】:

  • +1 合奏。就个人而言,我很久以前就放弃了 Apple 的 iCloud 与 Core Data 的集成。它现在可以修好了,有些人声称它已经修好了……但我找到了一个简单的解决方案,我自己动手,然后去合奏,再也没有回头。这是我觉得苹果完全失败的少数几个领域之一,我完全放弃了这项技术。 Ensembles 非常擅长它的功能,即使您可能不需要它,您也会想要为升级付费。
  • @JodyHagins 我完全同意你的看法;我读过很多次,现在情况好多了,但我仍然没有找到一个真正可行的解决方案来让它发挥作用:如果现在还没有那么糟糕,我只能想象几年前它有多糟糕; )。我确认购买 Ensembles 2.0 或至少为这本书付费的愿望很强烈,只是为了支持他们,但我正在开发一个非常紧张(不存在)预算的爱好应用程序,所以我必须等待等我发布的时候先卖几本。
  • 您好,cdf1982,据我所知,第 3 方同步替代方案的问题是,如果设备处于离线状态并最终连接到 WIFI 网络,它们将无法运行。即:假设您处于离线状态并添加了一个对象。然后你把你的手机放在你的口袋里,当你走路时它会连接到 WIFI。使用 iCloud + CD 我认为有一个系统队列会自动上传您的对象。但是第 3 方同步机制不能。是真的吗?
  • Ensembles 实际上并不是 3d 派对同步机制,因为它实际上使用 iCloud(或 Dropbox,或其他)来同步数据。就我而言,我在设备 1 上添加了一个对象,它立即与云同步(以 iCloud 作为后端的集成);如果设备 2 处于离线状态,它会在它在线时立即获取该项目(当然,“立即”和“尽快”通常是几秒钟,但有时需要更多时间,你无法控制 iCloud )。如果我理解,您担心的是您的应用在不活动时不会加载从云接收的同步数据,对吧?
  • ... 我想要的行为:我希望用户在前台返回时找到已经更新的应用程序。好消息是,当我离开时,我的手机记录了 3 次“更新 BG”,所以背景模式和 application.setMinimumBackgroundFetchInterval() 似乎做了一些事情,它们只是还没有开始自动合并从 iCloud 接收的数据。而且我不确定我是否可以完成这项工作,因为您醒来时几乎没有时间执行操作。但是,当连接返回可用时,iPad 会立即将应用数据发送到 iCloud,而无需运行应用。 Ensembles 大获全胜!
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多