我正在使用UIDocumentBrowserViewController与QLPreviewController结合使用来预览用户在UIDocumentBrowserViewController中选择的文档,效果非常好。QLPreviewController
使用的pickedDocumentURL
变量填充如下:
func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) {
// (...)
pickedDocumentURL = documentURLs.first as NSURL?
// Present QLPreviewController instance ...
}
但是,当我使用以下方法填充pickedDocumentURL
变量时:
pickedDocumentURL = NSURL(string: documentURLs.first!.absoluteString)
或:
pickedDocumentURL = URL(string: documentURLs.first!.absoluteString) as NSURL?
。然后QLPreviewController
不起作用(它显示,但预览为空(,我在控制台上收到以下错误:
[默认] QLUbiquitousItemFetcher:无法创建沙盒包装器。错误:错误 域=NSPOSIXError域代码=1"无法发出沙盒扩展 com.apple.quicklook.readonly for '/private/var/mobile/Containers/Shared/AppGroup/07524B34-D877-449F-A5C3-89A0431560E5/File 供应商 存储/22207162/1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_/样品.pdf': 操作不允许" 用户信息={NSDescription=无法发出 sandbox extension com.apple.quicklook.readonly for '/private/var/mobile/Containers/Shared/AppGroup/07524B34-D877-449F-A5C3-89A0431560E5/File 供应商 存储/22207162/1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_/样品.pdf': 不允许操作} #PreviewItem
此外,每种情况下的 URL 绝对字符串完全相同。
您使用的是 .absoluteString,请使用 .path 代替,我遇到了同样的问题,这解决了它:
pickedDocumentURL = NSURL(string: documentURLs.first!.path)
这是对我有用的代码:
func getPreviewItem(withName name: String ) -> NSURL
{
//let file = name.components(separatedBy: ".")
let pdfFile = getDocumentsDirectory().appendingPathComponent(name)
let url = pdfFile as NSURL (this line was the key)
return url
}