WKNavigationDelegate在分配时崩溃应用程序

时间:2016-06-23 15:58:48

标签: ios swift webkit wkwebview

我正在开发一个适用于iOS的简单Web包装器应用程序,而且我在使用WKWebView和WKNavigationDelegate时遇到了一些问题。我想使用WKNavigationDelegate中的didFinishNavigation函数,所以我可以从导航上的URL查询中获取信息(即会话GUID)。当我注释掉" webView.navigationDelegate = self"我的程序正确启动并加载我的网页。但是当我包含它时,我的应用程序会立即崩溃并出现以下错误:

 " -[UIWebView setNavigationDelegate:]: unrecognized selector sent to instance 
 0x7f8251e058f0"
"*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[UIWebView setNavigationDelegate:]: unrecognized selector sent to 
instance 0x7f8251e058f0'"

我注意到这两个错误消息都包含" UIWebView,"当我尝试使用WKWebView时,我尝试使用"自定义类"来自故事板的身份检查员部分的webview上的字段,但是当我尝试在那之后运行时,我得到"(lldb)。"任何帮助/见解将不胜感激,我在下面包括我的代码:

 import UIKit
 import WebKit

class ViewController: UIViewController, WKNavigationDelegate  {

@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    print("view did load")

    webView.navigationDelegate = self
    loadURL("http://mydomain/login.html")
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

private func loadURL(targetURL: String){
    if let url = NSURL(string: targetURL) {
        let request = NSURLRequest(URL: url)
        webView.loadRequest(request)
    }
}



private func checkDomainGetSessionGUID(){
    print ("we are here")
    if let query = webView.URL?.query {
        let queryArr = query.componentsSeparatedByString("&")
        var parsedQuery : [String: String] = [:]
        for field in queryArr {
            let parts = field.componentsSeparatedByString("=")
            parsedQuery.updateValue(parts[1], forKey: parts[0])
            print ("key =  \(parts[0]) and value = \(parts[1])")
        }
    }
    else {
        print ("didn't enter the if let")
    }
}

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    print ("delegate")
   checkDomainGetSessionGUID()
}

}

2 个答案:

答案 0 :(得分:0)

过程1:

步骤1:检查在Storyboard设计中使用的UIElement。如果您使用的是 Web视图而不是** WebKit View,则可能会出现此错误。请检查您的IBOutlet连接。

第2步:检查您的IOS部署目标,因为IOS 8中发布了UIWebKit View,所以它必须是IOS 11及更高版本,但其中包含仅在IOS 11中已修复的错误。因此,请将您的部署目标设置为11或更高。

第3步:检查您的info.plist属性。以下属性应添加到列表中App Transport Security Settings -> Allow Arbitrary Loads -> YES

过程2:

如果您希望将部署目标定为IOS 10或IOS 11以下,则意味着您可以像这样实现

步骤1:使用其快速的ViewController文件创建一个新的UIViewcontroller。并添加下面给出的代码以运行您的URL:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

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()

    let myURL = URL(string:"https://www.apple.com")
    let myRequest = URLRequest(url: myURL!)
    webView.load(myRequest)
}}

我希望这对您有帮助...

答案 1 :(得分:0)

我在 (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation 中收到此错误

我删除了 [super webView:webView didFinishNavigation:navigation]; 行,一切都按我的预期工作,但我不确定它是否有问题。