允许用户在 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中照片的Swift UIImagePickerController问题并允许编辑