如何在 iCloud 未启用时保存文件,然后启用

Posted

技术标签:

【中文标题】如何在 iCloud 未启用时保存文件,然后启用【英文标题】:How to save files when iCloud not enabled, and then becomes enabled 【发布时间】:2012-08-30 14:21:46 【问题描述】:

根据苹果的 iCloud 文档:

每个拥有 Apple ID 的用户都会收到一个免费的 iCloud 帐户,但有些用户可能会选择不为给定设备启用 iCloud。在尝试使用任何其他 iCloud 接口之前,您必须调用 URLForUbiquityContainerIdentifier: 方法来确定是否启用了 iCloud。此方法在启用 iCloud(并且指定的容器目录可用)时返回一个有效的 URL,或者在禁用 iCloud 时返回 nil。

如果 URLForUbiquityContainerIdentifier: 返回 nil,那么我认为您必须保存到用户的文档目录。如果用户在以后启用了 iCloud,你应该怎么做?文档只告诉您在一切按计划进行时该怎么做,但没有提及处理其他任何事情的最佳实践……如果 iCloud 被禁用,icloud 文档的本地副本会被删除,还是被删除权限?来自沙盒?

【问题讨论】:

【参考方案1】:

您应该保存启用 iCloud 的状态(即您是否能够从 URLForUbiquityContainerIdentifier: 获得非零结果),注册以获取有关情况更改的通知等。如果您检测到状态已从关闭变为开启,解决方法很简单;致电setUbiquitous:itemAtURL:destinationURL:error: 将文件从您的世界复制到无处不在的世界(毕竟它只是一个文件夹)。

文档中很好地涵盖了这种情况:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html

不幸的是,如果您检测到相反的情况(用户已关闭 iCloud),文件将丢失并且您无法检索它,因为假设 URLForUbiquityContainerIdentifier: 现在返回 nil。但它仍然在云端。我认为您可以提供界面来要求用户重新打开 iCloud,并提供更多界面来让用户请求将文件移回非普遍存在的世界。

【讨论】:

因为,如上所述,禁用 icloud 时 icloud 副本会丢失(除非稍后重新启用),如果您希望 icloud 能够切换,则基本上您必须维护 2 个数据副本没有用户数据无法访问。对我来说,这似乎是 icloud 设计的疏忽,但实际上对此无能为力。实际上,我认为用户永远不会关闭它,如果他们这样做了,数据不再可用是有逻辑的原因的(它在您的 icloud 中,您的 icloud 已关闭,抱歉,再次打开以访问它)。丑陋但在现实世界中微不足道。 @matt 对于我的情况,如果启用/禁用 iCloud,我正在考虑不合并更改。基本上,如果 iCloud 关闭,它将访问本地文件;如果它打开,它将访问 ubiquity 文件夹中的文件。因此,iCloud 是启用还是禁用将决定将显示的文档类型。你知道这是否是可以接受的做法吗?或者我应该在启用时将本地数据合并到 iCloud 中? (反之亦然) @Hope4You 我不知道什么是“可接受的”,除非在您的用户眼中。如果他们不在乎他们的数据已经神秘地消失/改变了(因为他们打开/关闭了 iCloud 并且没有意识到它会产生这种影响),那么他们不在乎。不过,我认为大多数开发人员关心的是提供无缝体验。

以上是关于如何在 iCloud 未启用时保存文件,然后启用的主要内容,如果未能解决你的问题,请参考以下文章

在我的应用程序上启用 iCloud 时,现有核心数据数据库未上传到 iCloud

如何在发布更新时启用 iCloud 并迁移 Core Data?

Cordova 插件未保存到 iCloud

在应用程序运行时启用/禁用 Core Data 的 iCloud 同步

为 iOS 应用程序的文件启用 iCloud Drive 文件夹

如何在 Ubuntu 20.04 上安装启用 SSH