如何从 UIDocumentPicker、didPickDocumentsAt urls 获取正确的文件名:[URL]

Posted

技术标签:

【中文标题】如何从 UIDocumentPicker、didPickDocumentsAt urls 获取正确的文件名:[URL]【英文标题】:How to get correct filename from UIDocumentPicker, didPickDocumentsAt urls: [URL] 【发布时间】:2019-04-04 03:28:09 【问题描述】:

我正在尝试从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)

【问题讨论】:

【参考方案1】:

切勿将String(describing:) 用于调试输出以外的任何内容。您的代码正在生成 URL 实例数组的调试输出。该输出将类似于:

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

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

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

只需访问您想要的数组中的元素。不要创建新的URL

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

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

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

【讨论】:

【参考方案2】:

urls 是 URL 数组,不是 URL,不是字符串

试试:

 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)
    

【讨论】:

以上是关于如何从 UIDocumentPicker、didPickDocumentsAt urls 获取正确的文件名:[URL]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIDocumentPicker 将 pdf 文件导入表格视图单元格

无法使用 UIDocumentPicker 导入页面和编号文档

在 iOS 中导入文件:UIDocumentPicker 与 UIDocumentBrowser

无法使用 UIViewRepresentable 和 UIDocumentPicker 选择文件夹

使用自定义 UTI 删除 UIDocumentPicker 导入/导出

UIDocumentPicker 导航栏按钮在 iOS 11 中隐藏