我正在使用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绝对字符串都完全相同。
你正在使用.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
}