无法使用 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
我正在使用这个简单的工具在我的应用程序中预览不同的文件,但其中 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