无法使用 QuickLook 预览文件

Unable to preview files with QuickLook

我正在使用这个简单的工具在我的应用程序中预览不同的文件,但其中 none 个已成功预览。

我第一次尝试预览任何文件时,它会打开带有消息 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:///,也许这就是问题所在?

问题是您使用了错误的初始值设定项。您正在将 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