首页 > 解决方案 > 无法使用 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)
    }

我不确定为什么我的 url 会附加 -- file:///在文件路径上,也许这会导致问题? 图像1 img2

标签: swiftquicklookqlpreviewcontrollerfiles-app

解决方案


问题是您使用了错误的初始化程序。您正在将 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。


编辑更新:

请注意,您不应该将文件直接放置到库文件夹中。文件系统基础

在此处输入图像描述


推荐阅读