2017-10-18 103 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 .... 最後它工作正常。再次感謝。現在我將試驗你的建議。