Миграция OAuthWebViewController из WebView в WKWebView - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь перенести WebView в WKWebView и работаю в исключении Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

Это брошено на webView.load(req)

Это мой WebView

import OAuthSwift
import UIKit
typealias WebView = UIWebView // WKWebView


class WebViewController: OAuthWebViewController {

    var targetURL: URL?
    let webView: WebView = WebView()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.frame = UIScreen.main.bounds
        self.webView.scalesPageToFit = true
        self.webView.delegate = self
        self.view.addSubview(self.webView)
        loadAddressURL()
    }

    override func handle(_ url: URL) {
        targetURL = url
        super.handle(url)
        self.loadAddressURL()
    }

    func loadAddressURL() {
        guard let url = targetURL else { return }
        let req = URLRequest(url: url)
        self.webView.loadRequest(req)
    }
}

// MARK: delegate
extension WebViewController: UIWebViewDelegate {
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if let url = request.url, url.scheme == "oauth-discogs" {
            // Call here AppDelegate.sharedInstance.applicationHandleOpenURL(url) if necessary ie. if AppDelegate not configured to handle URL scheme
            // compare the url with your own custom provided one in `authorizeWithCallbackURL`
            self.dismissWebViewController()
        }
        return true
    }
}

И это то, что у меня сейчас есть для моего WKWebView

import UIKit
import WebKit
import OAuthSwift

class WKWebViewController: OAuthWebViewController, WKUIDelegate {

    var targetURL: URL?
    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView?.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .purple

        loadAddressURL()
    }

    override func handle(_ url: URL) {
        targetURL = url
        super.handle(url)
        self.loadAddressURL()
    }

    func loadAddressURL() {
        guard let url = targetURL else { return }
        print(url)
        let req = URLRequest(url: url)
        print(req)
        webView.load(req)
    }
}

extension WKWebViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
        title = webView.title
    }
}

Операторы print в loadAddressURL выводят ожидаемый URL, однако я полностью застрял в том, что происходит не так.

Возможно ли в это время использовать WKWebView для этой цели?

Я считаю, что отсутствие shouldStartLoadWith может помочь вызвать эту проблему, как я могу переписать это? Любая помощь нам очень ценится.

...