【问题标题】:How to access data in a UIPasteboard copied by Files.app?如何访问由 Files.app 复制的 UIPasteboard 中的数据?
【发布时间】:2018-09-08 14:40:54
【问题描述】:

我想使用Files.app 复制一个文件夹(例如从 Dropbox 或 iCloud),然后切换到我的应用程序并读取该文件夹的内容以进行进一步处理。我找不到从UIPasteboard 获取实际数据的方法。在NSItemProvider 上调用loadObject 会给我一个NSData 存档,我可以将其取消存档,然后获得一个(私有)FPItem,它实现<NSFileProviderItem>,但现在呢?我如何才能真正请求下载此项目指向的实际文件夹?

【问题讨论】:

    标签: ios uipasteboard files.app


    【解决方案1】:

    据我了解,您想从 Dropbox 下载一个文件夹。您可能需要考虑使用带有 URLSession.shared.datatask(...) 的 Dropbox API 和 REST 请求。如果您不想处理实现细节,可以使用 SwiftyDropbox 之类的库。实际上没有任何需要使用 UIPasteboard 因为您的最终目标是将文件夹下载到您的应用程序。如果您想将上述文件夹保存到 Files 应用程序,您可以在下载/处理该文件夹后执行此操作。

    这里有一些有用的链接:

    1. Swifty Dropbox Overview
    2. Swifty Dropbox Download Example
    3. Swifty Dropbox API Docs
    4. Dropbox API HTTP (RESTful Requests)

    在链接 2 中,下面代码的 sn-p 获取用于保存文件的目录。获取整个文件夹的一种方法是 (1) 在 Documents 目录中创建一个新文件夹,例如 this 和 ( 2) 遍历 Dropbox 文件夹中的每个项目并将其添加到新创建的文件夹中。

    let fileManager = FileManager.default
    let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let destURL = directoryURL.appendingPathComponent("myTestFile")
    

    要实现 (1),您需要获取文件夹中的所有文件,您可以使用此 /list_folder API 端点来执行此操作。然后,为了实现 (2),您将遍历所有给定的文件,像在 link 2 中一样下载它们。

    如果我的回答有帮助,或者您需要任何进一步的说明,请告诉我。非常感谢! :)

    【讨论】:

    • 感谢您的回答,但这根本不能解决我的问题。我与UIPasteboard 打交道的真正原因是集成任何 3rdparty SDK,而是依赖文件提供程序扩展和拖放 (iPad) / UIPasteboard (iPhone) 来处理这是一种透明和规范的方式。
    • 您不需要使用 3rd 方 API,只需使用 HTTP 请求,如我的回答中所提供。但如果这不是你想要的,那没关系......
    【解决方案2】:

    我利用我宝贵的技术支持事件 (TSI) 让 Apple 工程师发表声明。

    结果是,此时,不支持将Files.app 中的文件夹复制粘贴到您自己的应用程序中。如果要导入文件夹,请使用UIDocumentPickerViewController

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      相关资源
      最近更新 更多