无法使用 QuickLook 预览文件
Posted
技术标签:
【中文标题】无法使用 QuickLook 预览文件【英文标题】:Unable to preview files with QuickLook 【发布时间】:2021-10-24 17:47:46 【问题描述】:我正在使用这个简单的工具来预览我的应用程序中的不同文件,但没有一个文件被成功预览。
我第一次尝试预览任何文件时,它会打开带有消息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)
我不确定为什么我的网址会在文件路径上附加 -- file:///
,这可能是导致问题的原因吗?
【问题讨论】:
因为 filesList 是具有属性 filepath 的 File 类的数组 在下面查看我的帖子 另请注意,您的应用已被沙盒化,并且每次启动时其位置都会发生变化。如果您需要保留该信息,则应仅保存其名称和目录,并在需要时重构您的 URL。 嗯,这是关于沙盒的非常好的信息,但我该如何改变呢?我现在将我的文件存储在 .libraryDirectory 中,然后将它们发送到 API。 API 会返回包含不再有效的文件路径的 filesList,对吗?解决办法是什么? 这取决于您是否有子文件夹。如果你不只是保存 lastPathComponent 【参考方案1】:问题是您使用了错误的初始化程序。您正在将 absoluteString 传递给需要路径的初始化程序(您的字符串包含方案 file://
)。顺便说一句,将 filePath 称为 absoluteString 具有误导性。
guard let url = URL(string: filesList[index].filePath ?? "") else
return // an alternate URL or a just create a fatalError
另请注意,您的应用已被沙盒化,其位置会在每次启动时发生变化。如果您需要保留该信息,则应仅保存其名称和目录,并在需要时重构您的 URL。
编辑更新:
请注意,您不应该将文件直接放在库文件夹中。 file system basics
【讨论】:
感谢里奥。我尝试了您提供的这个版本的 url,但结果仍然相同。也许问题出在您正在谈论的沙箱中。 ,但我该如何改变呢?我现在将我的文件存储在 .libraryDirectory 中,然后将它们发送到 API。 API 会返回包含不再有效的文件路径的 filesList,对吗?解决办法是什么? 最好的选择是在应用启动时获取目录的内容 所以如果我理解你的话,我应该只将 name.extension 发送给 API,因为我没有子文件夹。然后在尝试使用 API 返回给我的 name.extension 预览文件后,我应该尝试在目录中找到该文件(其路径),因为这部分“AB608864-C682-47BB-8396-2D456430879E”在每个应用程序上都在更改跑步吗? 但是我会将答案标记为正确,因为它解决了“file://”问题 这是正确的,但请检查文件系统基础链接。您应该使用应用程序支持文件夹。只需使用您的捆绑包 ID 在那里创建一个子文件夹并将您的文件放在那里。以上是关于无法使用 QuickLook 预览文件的主要内容,如果未能解决你的问题,请参考以下文章
将 QuickLook 预览生成委托给其他 QLPlugin
sh 使用OSX Finder Quicklook预览所有纯文本文件。方便的操作快捷方式需要为OSX Finder的Quick安装QLStephen插件