2017-10-18 166 views
0

我遇到了获取包中文件的路径/ URL的问题。下面是我用无法访问包中的文件

@IBOutlet weak var testWebView: UIWebView! 

private func setText() { 

if let path = Bundle.main.path(forResource: "theory", ofType: "pdf") { 
    let url = NSURL(fileURLWithPath: path) 
    let request = NSURLRequest(url: url as URL) 
    testWebView.loadRequest(request as URLRequest) 
} 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // setText() 
} 

override func viewDidAppear(_ animated: Bool) { 
super.viewDidAppear(animated) 
setText() 
} 

文件理论.pdf是在主束(无子文件夹等) 我想在这里讨论的方法很多,像创建组/新建文件夹参考等复制代码 - 没有帮助。 webView在StoryBoard中设置。

+1

是文件的目标成员集?拼写是否正确(大小写)?顺便说一下,使用'Bundle.main.url(forResource:withExtension :)',('URL')和'URLRequest'来避免丑陋的桥梁转换。 – vadian

+0

要用WKWebView打开本地文件资源,您应该使用loadfileurl https://developer.apple.com/documentation/webkit/wkwebview/1414973-loadfileurl –

+0

预览PDF https://stackoverflow.com/a/34148055/2303865 –

回答

0

如果你的目标是要显示PDF我强烈建议使用UIDocumentInteractionController

class ViewController: UIViewController { 

    private var documentInteractionController: UIDocumentInteractionController? 

    private func setText() { 
     if let path = Bundle.main.path(forResource: "theory", ofType: "pdf") { 
      let url = URL(fileURLWithPath: path) 
      let controller = UIDocumentInteractionController(url: url) 
      controller.delegate = self 
      controller.presentPreview(animated: true) 
      documentInteractionController = controller 
     } 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     setText() 
    } 

} 

你也需要实现UIDocumentInteractionControllerDelegate

extension ViewController: UIDocumentInteractionControllerDelegate { 

    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController { 
     return self 
    } 

} 
+0

这实际上会打开另一个应用程序,我会推荐使用QLPreviewController或PDFKit(iOS 11+) –

+0

谢谢,当然这样会更好,但是我的问题是这个路径从Bundle.main.url/path收到nil。我无法通过这行代码。:-( –

+0

iOS是区分大小写的,所以文件必须匹配完全理论.pdf。尾部呃将文件添加到您需要的项目中,以确保在打包捆绑软件时将其复制到捆绑软件上。您可以通过转到目标构建阶段>复制包资源来验证这一点。该文件必须在列表中。如果不存在,您可以使用+或通过从项目导航器中选择它并将其添加到目标成员身份上进行添加。 – mt81

0

谢谢大家家伙。我整理了这个问题。除了将PDF拖放到捆绑包中,我在Project Navigator上右键单击并选择了将文件添加到... 然后在上传的文件上再次右键单击并选择add .... 最后它工作正常。再次感谢。现在我将试验你的建议。