如何以异步方式访问 iCloud 文档文件

问题描述

我正在尝试在我现有的应用程序中添加对 iCloud 文档的支持,但我很难做到这一点。

Apple 似乎更喜欢您为此使用 UIDocument 类。但是 UIDocument 不直接访问文件系统中的文件,它希望在 NSData 对象中维护文件内容的副本。在我的情况下,这根本不可行。我当前所有的代码和我使用的 3rd 方库的一半,直接使用文件系统上的文件,而不是 NSData。重写所有这些代码根本不可行。

当不使用 UIDocument 类时,Apple 希望您使用 NSFileCoordinator 来协调对文件内容的访问。我试图用我的代码来做到这一点,但 NSFileCoordinator 上的方法似乎期望所有的读取和写入都将在一个同步序列中完成。 NSFileCoordinator 的所有方法都将一个块作为参数,并期望在该块内执行所有读/写操作。据我所知,当块返回时,您不能再进行任何文件访问。

这对我来说也是不可行的。我的一些代码和第 3 方库在后台线程上以异步方式进行读/写。我可以确定代码需要访问文件内容的时间段的开始和结束,所以如果有一个单独的 requireAccess 方法,并且在 relinquishAccess 上有单独的 NSFileCoordinator,那将使我能够实现目标。但似乎并非如此。

我不清楚 NSFilePresenter 在这方面的作用是什么。一些文档,尤其是 NSFilePresenter 中的 relinquishPresentedItemToReader() 文档似乎表明您实际上可以单独获取/放弃访问权限:

如果您想在读者完成任务时收到通知, 将您自己的块传递给读取器并使用该块重新获取 供您自己使用的文件或网址。

但它没有在任何地方解释如何“重新获取”文件。

所以具体问题:我需要以异步方式执行以下步骤:

  1. 获得对该文件的访问权,并获得该文件在本地文件系统上的 file: URL
  2. 执行多个异步操作, 对普通文件系统的文件进行读/写操作 对该 file: 网址的操作
  3. 放弃对文件的访问

有人知道是否可以这样做,以及如何进行第 1 步和第 3 步吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...