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

问题描述 投票:0回答:2

我正在使用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:无法创建沙箱包装器。错误:错误域= NSPOSIXErrorDomain代码= 1“无法为'/ private / var / mobile / Containers / Shared / AppGroup / 07524B34-D877-449F-A5C3-89A0431560E5 /文件提供程序发出沙箱扩展com.apple.quicklook.readonly存储/ 22207162 / 1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_ / Sample.pdf':不允许操作“UserInfo = {NSDescription =无法为'/ private / var / mobile / Containers / Shared / AppGroup /发布沙盒扩展com.apple.quicklook.readonly 07524B34-D877-449F-A5C3-89A0431560E5 / File Provider Storage / 22207162 / 1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_ / Sample.pdf':不允许操作} #PreviewItem

而且,每种情况下的URL绝对字符串都完全相同。

uikit quicklook qlpreviewcontroller ios12 uidocumentbrowservc
2个回答
0
投票

你正在使用.absoluteString,改为使用.path,我有同样的问题,这解决了它:

pickedDocumentURL = NSURL(string: documentURLs.first!.path)

-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
}
© www.soinside.com 2019 - 2024. All rights reserved.