我正在尝试在我现有的应用程序中添加对 iCloud Documents 的支持,但我很难做到这一点。
苹果似乎更喜欢你使用这个UIDocument
类。但是 UIDocument 不会直接访问文件系统中的文件,而是希望在 NSData 对象中维护文件内容的副本。在我的情况下,这根本不可行。我当前使用的所有代码和一半的 3rd 方库都直接使用文件系统上的文件,而不是使用 NSData。重写所有这些代码根本不可行。
当不使用 UIDocument 类时,Apple 希望您使用NSFileCoordinator
来协调对文件内容的访问。我试图用我的代码来做到这一点,但是 NSFileCoordinator 上的方法似乎期望所有的读取和写入都将在一个同步序列中完成。NSFileCoordinator 的所有方法都以一个块作为参数,并期望所有的读/写都在该块内执行。据我了解,当块返回时,您不再被允许进行任何文件访问。
这在我的情况下也是不可行的。我的一些代码和第 3 方库在后台线程上以异步方式进行读/写。我可以确定代码需要访问文件内容的时间段的开始和结束,所以如果有一个单独的requireAccess
方法,并且relinquishAccess
在 上分开NSFileCoordinator
,那将使我能够实现目标。但情况似乎并非如此。
我不清楚这其中的作用是什么NSFilePresenter
。一些文档,尤其是relinquishPresentedItemToReader()
NSFilePresenter 中的文档似乎表明您实际上可以单独获取/放弃访问权限:
如果您想在阅读器完成其任务时收到通知,请将您自己的块传递给阅读器并使用该块重新获取文件或 URL 以供您自己使用。
但它没有在任何地方解释如何“重新获取”文件。
所以具体的问题:我需要以异步方式执行以下步骤:
- 获取对文件的访问权限,并
file:
在本地文件系统上获取文件的 URL file:
在该URL上使用正常的文件系统操作对文件执行多个异步读/写操作- 放弃对文件的访问
有谁知道是否可以这样做,以及如何执行第 1 步和第 3 步?