UIDocumentPickerViewController用户选择了哪种云服务?

时间:2018-04-04 08:22:20

标签: swift google-drive-api swift4 uidocumentpickerviewcontroller

我想从Google云端硬盘中选择文件和One驱动器云服务,我正在使用UIDocumentPickerViewController

enter image description here

例如:

func didPressOneDriveChoose() {
    let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .import)
    importMenu.delegate = self
    importMenu.modalPresentationStyle = .formSheet
    self.show(importMenu, sender: nil)
}

委托方法的recled callBack:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]){

    var arrFiles = [Dictionary<String, AnyObject>]()
    for url in urls {
        // returns local document directory URL
        // needs original GoogleDrive or OneDrive URL
    }
}

但我想知道有没有办法让用户选择哪种云服务,我还想要指向该网址的原始网址?目前,它在点击下载该文件后返回本地文档目录URL。

2 个答案:

答案 0 :(得分:2)

您初始化为:

let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .import)

如果您read the documentation使用此特定选择器模式.import,则说明:

  

URL指的是所选文档的副本。这些文件是临时文件。它们仅在您的应用程序终止之前保持可用。要保留永久副本,请将这些文件移动到沙箱中的永久位置。

.open似乎更适合您的用例。

  

URL指的是所选文档。提供的URL是   安全范围,指的是应用程序沙箱外的文件。对于   有关使用外部安全范围URL的更多信息,请参阅   要求。

但是,由于您只是观察网址以识别服务而不是实际尝试手动访问这些文档,因此您不必担心违反任何要求。因此,将UIDocumentPickerViewController初始化更改为:

let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .open)

它应该有效!

答案 1 :(得分:1)

出于隐私原因,您将无法了解云服务(除非您开始从URL推断它...糟糕的主意)。但是,如果您使用open模式而不是import模式(in: .open),则可以从原始位置获取文件,而不是副本。警告,如果您使用open模式,则会开始打开文档,因此您需要适当地使用文件协调。

相关问题