swift - 无法使用 QuickLook 预览文件
问题描述
我正在使用这个简单的工具来预览我的应用程序中的不同文件,但没有一个被成功预览。
我第一次尝试预览任何文件时,它会使用 message 打开预览控制器Unsupported file format
,而其他任何时候它只显示文件名和单词data
(参见图片)。
这是实现(注意打印语句):
extension FileShareVC: QLPreviewControllerDataSource, QLPreviewControllerDelegate {
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
filesList.count
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
let url = NSURL(fileURLWithPath: filesList[index].filePath ?? "", isDirectory: false)
print(filesList[index].filePath!)
//prints file:///var/mobile/Containers/Data/Application/AB608864-C682-47BB-8396-2D456430879E/Documents/F9RIB62HBUAW.jpeg
print("url: \(url)")
//prints file:/var/mobile/Containers/Data/Application/AB608864-C682-47BB-8396-2D456430879E/Documents/F9RIB62HBUAW.jpeg -- file:///
return url
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let quickLookViewController = QLPreviewController()
quickLookViewController.dataSource = self
quickLookViewController.delegate = self
quickLookViewController.currentPreviewItemIndex = indexPath.row
present(quickLookViewController, animated: true)
}
解决方案
问题是您使用了错误的初始化程序。您正在将 absoluteString 传递给需要路径的初始化程序(您的字符串包含 scheme file://
)。顺便说一句,将 filePath 称为 absoluteString 具有误导性。
guard let url = URL(string: filesList[index].filePath ?? "") else {
return // an alternate URL or a just create a fatalError
}
另请注意,您的应用是沙盒化的,每次启动时其位置都会发生变化。如果您需要保留该信息,则应仅保存其名称和目录,并在需要时重新组合您的 URL。
编辑更新:
请注意,您不应该将文件直接放置到库文件夹中。文件系统基础
推荐阅读
- javascript - 使用handelbars bar模板显示具有特定标题的所有对象
- html - 在不渲染页面的情况下使用 nodejs 更改 html 中的内容
- bintray - Bintray API 阻塞 HEAD 方法请求
- html - 如何显示带有标签的复选框?我的代码只显示标签为什么?
- ms-access - 直接将 ADTG 文件写入 MS Access 表
- elixir - ExDoc:获取与私有存储库一起使用的源链接
- c# - 使用 Microsoft.CodeAnalysis Nuget 包会导致 WACK 失败
- angularjs - Angularjs:在 $routeChangeError 上更改路线
- c# - ArgumentOutOfRangeException - 索引超出范围。必须是非负数且小于集合的大小
- user-interface - Nukear GUI 演示未运行