QLPreviewController работает с URL-адресами, предоставленными UIDocumentBrowserViewController, но не с URL-адресами, созданными вручную
Я использую 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/ Поставщик файлов Storage/22207162/1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_/Sample.pdf': операция не разрешена " UserInfo={NSDescription= не удалось создать расширение песочницы com.apple.quicklook.readonly для' / private / var / mobile / Containers / Shared / AppGroup / 07524B34-D877-449F-A5C3-89A0431560E5 / Хранилище поставщика файлов / 22207162 / 1qrbGgy6-u0f69mPqOjjpzlYiUYPR8OG_ / Sample.pdf ': операция не разрешена} #PreviewItem
Более того, абсолютные строки URL в каждом из этих случаев абсолютно одинаковы.
1 ответ
Вы используете.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
}