如何从UIDocumentPicker,didPickDocuments获取正确的文件名网址:[URL]

时间:2019-04-04 03:28:10

标签: ios swift uidocumentpickerviewcontroller

我正在尝试从UIDocumentPickerViewController获取带有扩展名的所选文件名,但是文件名在文件扩展名的末尾带有“]”。关于正确方法的任何建议吗?

这是我的代码:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    let filename = URL(fileURLWithPath: String(describing:urls)).lastPathComponent // print: myfile.pdf]
    self.pickedFile.append(filename)
    // display picked file in a view
    self.dismiss(animated: true, completion: nil)
}

2 个答案:

答案 0 :(得分:0)

urls是URL数组,不是URL,不是String

尝试:

 func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    if let filename =  urls.first?.lastPathComponent {
        self.pickedFile.append(filename)
        // display picked file in a view
        self.dismiss(animated: true, completion: nil)
    }
}

答案 1 :(得分:0)

除调试输出外,请勿将String(describing:)用于其他任何用途。您的代码正在生成URL实例数组的调试输出。该输出将类似于:

  

[file:///some/directory/someFileA.ext,file:///some/directory/otherFile.ext]

当然,无论选择多少文件,数组输出都会包含

然后,您尝试从URL实例数组的调试输出中创建文件URL,然后获取该URL的最后一个路径。这就是为什么您会得到结尾的]

只需访问所需数组中的元素即可。不要创建新的URL

if let filename = urls.first?.lastPathComponent {
    self.pickedFile.append(filename)
}

更好的是,将它们全部添加:

for url in urls {
    self.pickedFile.append(url.lastPathComponent)
}