我将UIDocumentBrowserViewController与QLPreviewController结合使用来预览用户在UIDocumentBrowserViewController中选择的文档,效果很好。 pickedDocumentURL
使用的QLPreviewController
变量填充如下:
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:无法创建沙箱包装。错误:错误 Domain = NSPOSIXErrorDomain Code = 1“无法发出沙箱扩展名 com.apple.quicklook.readonly用于 '/ private / var / mobile / Containers / Shared / AppGroup / 07524B34-D877-449F-A5C3-89A0431560E5 / File 提供者 存储器/22207162/1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_/Sample.pdf': 不允许执行操作” UserInfo = {NSDescription =无法发出 沙箱扩展com.apple.quicklook.readonly用于 '/ private / var / mobile / Containers / Shared / AppGroup / 07524B34-D877-449F-A5C3-89A0431560E5 / File 提供者 存储器/22207162/1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_/Sample.pdf': 不允许操作} #PreviewItem
此外,在每种情况下,URL绝对字符串都是完全相同的。
答案 0 :(得分:0)
您使用的是.absoluteString,而是使用.path,我遇到了同样的问题,并且此问题得以解决:
pickedDocumentURL = NSURL(string: documentURLs.first!.path)
答案 1 :(得分:-1)
以下是对我有用的代码:
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
}