无法为URL发出文件扩展名

时间:2018-04-19 19:16:46

标签: ios swift xcode pdf quicklook

我被困住了,不知道该怎么做。我希望能够使用QuickLook在我的应用程序中显示PDF。我已将PDF文件导入到我的项目中,并使用下面的代码显示它。

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
    //let bundle = Bundle.main
    let resourcePath = Bundle.main.resourceURL!.appendingPathComponent("Manuals/\(nodeName).pdf").path
    //let path = resourcePath + bundle.path(forResource: nodeName, ofType: "pdf")!
    let url = URL(fileURLWithPath: resourcePath)
    return url as QLPreviewItem
}

生成的网址是

"file:///var/containers/Bundle/Application/3923DC1F-386E-4038-A8B1-A855483F4C06/Application%20v1.app/Manuals/CYB.pdf"   

我得到的错误是

Couldn't issue file extension for url: file:///var/containers/Bundle/Application/3923DC1F-386E-4038-A8B1-A855483F4C06/Application%20v1.app/Manuals/CYB.pdf #PreviewItem

并在显示屏上我只是得到一个灰色屏幕,其中包含文件名和PDF文档。有谁知道我做错了什么。我已经厌倦了谷歌的答案,但要么解决方案不适合我,或答案已过时。

任何帮助都会很棒。如果您需要了解更多信息,请告诉我,我可以提供。

由于

3 个答案:

答案 0 :(得分:7)

感谢所有为此问题提供意见的人。我终于修好了。事实证明,这与我发布的代码无关,但由于我的iPad没有运行iOS 11.3。出于某种原因,此问题发生在11.2.x但在11.3中得到修复。我不知道为什么我没有提前更新,但最终还是有效。希望其他任何有这个问题的人都觉得这很有用,并且不会浪费一整天的时间来弄清楚它为什么不起作用。

再次感谢。

答案 1 :(得分:1)

要访问主Bundle中文件夹内的文件,请将名为 Manuals 的文件夹拖到项目xcode并选择创建参考文件夹

enter image description here

//

enter image description here

然后使用

访问资源
let fileUrl = Bundle.main.url(forResource:\(nodeName) ,withExtension:"pdf",subdirectory: "Manuals")  

答案 2 :(得分:1)

iOS 11.2中存在已知问题。可能的解决方案是在显示文件之前将文件复制到文档目录中的临时文件。 https://forums.developer.apple.com/thread/91835