Laden Lokale PDF-Datei In WebView
Ich bin versucht, legen Sie die folgenden Funktionen in eine iOS-app, die ich Schreibe:
- Schiff eine Reihe von PDF-Dateien im resources-Ordner des Projekts in XCode
- Kopieren der PDFs in dem Verzeichnis app
- Öffnen Sie das PDF-Dokument in einem webview.
Soweit ich sehen kann, sind die ersten beiden Schritte funktionieren ok (ich habe FileManager zu überprüfen fileExistsAtPath nach dem Kopiervorgang).
Aber die webview ist leer, und ist erroring ("die angeforderte URL existiert nicht auf dem server").
Mein code für die Datei zu öffnen, ist wie folgt:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *localDocumentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = @"example.pdf";
NSString *localDocumentsDirectoryPdfFilePath = [localDocumentsDirectory
stringByAppendingPathComponent:pdfFileName];
pdfUrl = [NSURL fileURLWithPath:localDocumentsDirectoryPdfFilePath];
[webView loadRequest:[NSURLRequestWithURL:pdfUrl];
Dies funktioniert gut auf dem simulator, aber nicht auf dem Gerät
- Das Gerät ist case-sensitive. Stellen Sie sicher, dass der Dateiname exakt überein.
- Anna, danke! Ich war daran zu sagen, dass ich bereits geprüft. Aber wenn ich ging zurück und sah wieder die .pdf wurde infact .PDF-Dokument, Wenn Sie fügen Sie diese als eine Antwort werde ich markiere ihn als gelöst. Nochmals vielen Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sicher, dass Sie nicht wollen, lassen die UIDocumentInteractionController tun, die schweres heben für Sie?
Als gepostet von Anna Karenina vor, "Das Gerät ist case-sensitive. Stellen Sie sicher, dass der Dateiname entspricht genau"
Als bshirley vorgeschlagen UIDocumentInteractionController ist eine gute option, um Ihre PDF-Datei. Zunächst versuchte ich mit der 3rd-party - JSQWebViewController aber ich war immer ein leerer Bildschirm auf dem Gerät, während auf dem simulator gearbeitet wurde. UIDocumentInteractionController funktionierte großartig für mich! Für Swift Sie tun können:
und Implementierung der delegate-Methode: