允许用户在 iCloud 不可用时编辑/查看现有文档

Posted

技术标签:

【中文标题】允许用户在 iCloud 不可用时编辑/查看现有文档【英文标题】:Allowing the user to edit/view existing documents when iCloud becomes unavailable 【发布时间】:2012-01-29 03:02:38 【问题描述】:

我一直在阅读 Apple Docs,在线阅读了一些教程,甚至在 iCloud 上观看了 CS193p 讲座,但仍有一件事我不清楚:

以您有一个将文档同步到 iCloud 的应用程序为例。您如何允许用户在无法访问 iCloud 服务(飞行模式、网络不可用等)时仍然查看/编辑现有文档并创建新文档

例如。 ios5 中的“提醒”应用程序允许用户查看/编辑驻留在 iCloud 上的现有文档,即使您可能处于飞行模式。然后在下次 iCloud 服务可用时传播更改。

这对我来说真的很奇怪。如果您的元数据查询未提供到普遍存在的容器的有效 URL,您如何填充提醒列表?即,调用URLForUbiquityContainerIdentifier: 将返回nil,因为iCloud 不可用。然后无法创建元数据查询,因为您无法为其提供查询的 URL。因此,您无法填充文档列表供用户离线查看和编辑。

非常感谢任何有关如何完成此操作的帮助或见解!

=====================================更新======= ==============================

好的 - 我偶然发现了这个帖子:here

它基本上是在谈论使用 iCloud 时文件是如何存储在文件系统中的。根据我在 iCloud 上创建文件时收集的信息,它基本上保存在一个特殊的扩展本地存储容器中,该容器在您第一次调用 URLForUbiquityContainerIdentifier: 时创建。这个特殊目录由 iCloud 守护进程管理。除了存储在这个特殊目录中之外,该文档还被上传到云端以供其他应用程序使用。

现在 - 假设我上面的假设是正确的,那么问题是:如果 iCloud 突然不可用,你如何访问本地守护程序存储的文件?

【问题讨论】:

【参考方案1】:

这个问题的答案与另一个问题有关。您需要从 iCloud 请求要修改的文件,以便将它们下载到本地 UbiquityContainer 中,该 UbiquityContainer 在离线模式下可用。请参阅此问题答案

Does URLForUbiquityContainerIdentifier: return nil when network access is not available?

总而言之,URLForUbiquityContainerIdentifier: 方法在离线时不会返回 nil,只是在 iCloud 真正不可用时才返回。

【讨论】:

我还应该提到 NSFileManager 可能是阻塞的,应该在与主线程不同的线程中调用。 ***.com/questions/9050359/…

以上是关于允许用户在 iCloud 不可用时编辑/查看现有文档的主要内容,如果未能解决你的问题,请参考以下文章

iCloud:获取文件的现有公共 URL

iCloud中照片的Swift UIImagePickerController问题并允许编辑

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

不允许在 Flex 中编辑 textarea 中的特定区域

应用程序是不是应该允许用户打开或关闭 iCloud?

Django - 禁用表单集中现有表单的编辑,但允许在新表单中编辑