Я пытаюсь отключить загрузку ссылок внутри wkWebView, поэтому я использую decidePolicyForNavigationAction для этого, но мое приложение дает мне эту ошибку:NSInternalInconsistencyException: WebView: decidePolicyForNavigationAction: decisionHandler не был назван
Terminating app due to uncaught exception 'NSInternalInconsistencyException' reason: 'Completion handler passed to -[ViewController webView:decidePolicyForNavigationAction:decisionHandler:] was not called'
Этот является упрощенный код, который дает мне эту ошибку:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView
required init?(coder aDecoder: NSCoder) {
let config = WKWebViewConfiguration()
self.webView = WKWebView(frame: CGRectZero, configuration: config)
super.init(coder: aDecoder)
self.webView.navigationDelegate = self
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
view.insertSubview(webView, atIndex: 1)
webView.translatesAutoresizingMaskIntoConstraints = false
let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: -44)
let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
view.addConstraints([height, width])
webView.loadRequest(NSURLRequest(URL:NSURL(string:"https://www.apple.com")!))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
if (navigationAction.navigationType == WKNavigationType.LinkActivated){
print(navigationAction.request.URL?.relativeString)
decisionHandler(WKNavigationActionPolicy.Cancel)
}
}
}
Я предполагаю, что здесь, но это выглядит, как вы ** сусло ** call solutionHandler, независимо от вашего решения. Попробуйте добавить 'else {decisionHandler (WKNavigationActionPolicy.Allow)}' в конец вашего метода делегата. –