QLPreviewController使用UIDocumentBrowserViewController提供的URL,但不适用于手动生成的URL

时间:2018-09-18 12:16:37

标签: uikit quicklook qlpreviewcontroller ios12 uidocumentbrowservc

我将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绝对字符串都是完全相同的。

2 个答案:

答案 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
}