向用户显示 iCloud 同步正在进行中

Posted

技术标签:

【中文标题】向用户显示 iCloud 同步正在进行中【英文标题】:Show the user that iCloud sync is in progress 【发布时间】:2014-04-08 05:20:57 【问题描述】:

我目前正在使用我的 CoreData-iCloud 设置。每次用户在他的一个设备中添加/删除/编辑整体时,更改都会同步到 iCloud(如果可用),然后在他打开应用程序时推送到他的其他设备。

不幸的是,iCloud 不是即时的。当用户在他的第二台设备上打开应用程序时,需要 10~20 秒的稳定连接才能显示同步数据。

有什么方法可以检测应用程序何时与 iCloud 连接,以通知用户确实发生了一些事情,并且应用程序正在运行(在某处显示一个小微调器)?

至少能够通过拉刷新或其他方式手动触发 iCloud 更新。如果能够向用户展示一些信息,告诉他“您的数据正在传输中,请稍等片刻”,这将是很棒的。

谢谢。

【问题讨论】:

【参考方案1】:

看看这些示例应用程序,它们使用 iCloud 中日志文件的状态来确定何时进行上传或下载活动。

http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/

【讨论】:

它应该是 100% 可靠的,因为它直接监控同步引擎的活动,尽管我只是将它作为一个新奇事物来实现。您甚至可以可靠地跟踪从保存到上传生成的事务日志文件,或者从检测到尚未下载的文件到收到导入通知为止。 下载完成后但在“确实导入”通知发生之前可能会有延迟,而实际导入数据。对吗? 我没有花太多时间检查延迟,因为苹果的 iCloud 在同步时间方面似乎有自己的想法。我无法弥补的差距是跨设备的。例如,当应用程序执行 MOC 保存(并且如果有更改)时,您知道必须创建事务日志并且必须将其上传到 iCloud - 因此您可以显示一些内容以向用户指示同步事务已开始以及何时完成。你不能做的是知道这是从另一台设备上发生的。 判断应用程序的“世界”是否同步的唯一方法是检查每个设备的 iCloud 文件是否已正确同步。给定的设备永远无法确定另一台设备本身没有待上传的内容。 我暂时接受您的回答,作为解决此问题的最准确方法。它不是最佳的,而且感觉很hackish,但它是最好的。谢谢。【参考方案2】:

没有用于使用 CoreData-iCloud 检查事务日志状态的 API。绝对没有办法“触发” iCloud 更新,但要检查待处理的数据,您也许可以使用 NSMetadataQuery 和 iCloud KVS 破解一些东西,但它也将是不精确和不可预测的。希望这是在 iOS8 中添加的(您可能想在使用 Radar 时提交)。

【讨论】:

以上是关于向用户显示 iCloud 同步正在进行中的主要内容,如果未能解决你的问题,请参考以下文章

手动同步 iCloud

iWork Mac办公应用配合iCloud进行多平台同步的方法

通过 iCloud 仅同步“一些”我的 coreData

从 iCloud 同步

iCloud - 核心数据同步问题

我如何检查用户是不是切换了 iCloud 帐户?