Sie haben endlich den Fehler behoben! Jetzt können wir verwenden -[WKWebView loadFileURL:allowingReadAccessToURL:]
. Anscheinend war das Update in WWDC 2015 Video 504 Einführung in Safari View Controller einige Sekunden wert
Für iOS8 ~ iOS10 (Swift 3)
Wie Dan Fabulishs Antwort besagt, handelt es sich um einen Fehler von WKWebView, der anscheinend nicht in Kürze behoben werden kann und wie er sagte, gibt es eine :)
Ich antworte nur, weil ich hier die Problemumgehung zeigen wollte. Der IMO-Code unter https://github.com/shazron/WKWebViewFIleUrlTest enthält viele nicht verwandte Details, an denen die meisten Menschen wahrscheinlich nicht interessiert sind.
Die Problemumgehung besteht aus 20 Codezeilen, Fehlerbehandlung und Kommentaren, kein Server erforderlich :)
func fileURLForBuggyWKWebView8(fileURL: URL) throws -> URL {
// Some safety checks
if !fileURL.isFileURL {
throw NSError(
domain: "BuggyWKWebViewDomain",
code: 1001,
userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("URL must be a file URL.", comment:"")])
}
try! fileURL.checkResourceIsReachable()
// Create "/temp/www" directory
let fm = FileManager.default
let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("www")
try! fm.createDirectory(at: tmpDirURL, withIntermediateDirectories: true, attributes: nil)
// Now copy given file to the temp directory
let dstURL = tmpDirURL.appendingPathComponent(fileURL.lastPathComponent)
let _ = try? fm.removeItem(at: dstURL)
try! fm.copyItem(at: fileURL, to: dstURL)
// Files in "/temp/www" load flawlesly :)
return dstURL
}
Und kann verwendet werden als:
override func viewDidLoad() {
super.viewDidLoad()
var fileURL = URL(fileURLWithPath: Bundle.main.path(forResource:"file", ofType: "pdf")!)
if #available(iOS 9.0, *) {
// iOS9 and above. One year later things are OK.
webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
} else {
// iOS8. Things can (sometimes) be workaround-ed
// Brave people can do just this
// fileURL = try! pathForBuggyWKWebView8(fileURL: fileURL)
// webView.load(URLRequest(url: fileURL))
do {
fileURL = try fileURLForBuggyWKWebView8(fileURL: fileURL)
webView.load(URLRequest(url: fileURL))
} catch let error as NSError {
print("Error: " + error.debugDescription)
}
}
}