ios - NSInternalInconsistencyException : webView:decidePolicyForNavigationAction:decisionHandler was not called

标签 ios swift webview wkwebview

我试图禁用 wkWebView 内的链接加载,因此我为此使用了 decidePolicyForNavigationAction,但我的应用程序给我这个错误:

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

最佳答案

您必须为每个案例调用 decisionHanler

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
    if (navigationAction.navigationType == .linkActivated){
        decisionHandler(.cancel)
    } else {
        decisionHandler(.allow)
    }
}

关于ios - NSInternalInconsistencyException : webView:decidePolicyForNavigationAction:decisionHandler was not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37307430/

相关文章:

ios - 如何获取时区名称的本地化城市和国家名称

swift - 未调用 CKQueryOperation 上的 recordFetchedBlock

ios - 如何将 userDefault 乘以一个数字?

android - 在 WebView html 问题中设置字体样式

ios - 无法使具有标识符 cellID 的单元格出队。相同的代码在旧的 Swift 上运行良好

ios - Xcode 11 : Changes in code not updated to app or breakpoint doesn't work

ios - urlNode.objectForKeyedSubscript ("href")作为?字符串 - Swift 2.3/Swift 3 错误

javascript - 在 WebView 中访问本地存储

android - RecyclerView 自动滚动到 WebView/Fresco SimpleDraweeView item

ios - map View 未显示注释点