繁体   English   中英

Xcode Swift - WKWebView 实现

[英]Xcode Swift - WKWebView implementation

我目前正在尝试使用WKWebView在 Xcode 的导航页面中实现一个简单的 WKWebView,但是,一旦我切换到专用页面,应用程序就会崩溃并引发以下异常:

2021-01-12 16:24:40.981110+0100 SmartMirror[2078:1089320] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[WKWebView 视图]:无法识别的选择器发送到实例 0x11380c400”

我还使用了一个活动指示器,它应该在页面加载之前显示。 这是我的代码: ThirdViewController.swift

import UIKit
import WebKit

class ThirdViewController: UIViewController, WKUIDelegate {
    
    @IBOutlet var webView: WKWebView!
    @IBOutlet var activityIndicator: UIActivityIndicatorView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let url = URL(string: "http://192.168.178.34:8080/")
        let request = URLRequest(url: url!)
        webView.load(request)
        webView.addObserver(self, forKeyPath: #keyPath(WKWebView.isLoading), options: .new, context: nil)
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        
        if keyPath == "loading" {
            
            if webView.isLoading {
                activityIndicator.startAnimating()
                activityIndicator.isHidden = false
            }else {
                activityIndicator.stopAnimating()
                activityIndicator.isHidden = true
            }
            
        }
        
    }
    
}

这是我的 storyboard,每个页面都有自己的视图:

https://i.stack.imgur.com/nFFlH.jpg

帮助将不胜感激!

真诚的,卢卡斯

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[WKWebView 视图]:无法识别的选择器发送到实例

您可能知道,这是因为有人正在向您的 web 视图发送-view消息,该视图没有该名称的方法。 不过, UIViewController有这样的方法,因此可以很好地猜测,在您的应用程序的某处,您的 web 视图被误认为是 controller 视图。 我没有在您发布的代码中看到这种情况,而且很难从 storyboard 的图像中分辨出任何东西。

找到问题的方法是在错误发生时查看堆栈跟踪。 找到抛出异常的线程,然后在堆栈中查找调用-view的线程。 这应该向您显示正在调用的方法。 如果调用不在您的代码中,请查看所涉及的 class ......您至少应该能够获得一些关于 object 正在调用什么类型的线索-view ,您可以查看该地方的代码在哪里配置 object。

我现在已经完全重新创建了整个应用程序,它现在可以工作了。 当我为这三个页面创建 ViewControllers 时,似乎出了点问题。 这次我也保留了原来的 ViewController。

毕竟这是我使用过的代码: ThirdViewController.swift

//
//  ThirdViewController.swift
//  SmartMirror
//

import UIKit
import WebKit

class ThirdViewController: UIViewController, WKUIDelegate {
    
    @IBOutlet var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let url = URL(string: "http://192.168.178.34:8080/")
        let request = URLRequest(url: url!)
        webView.load(request)
    }
    
}

感谢所有帮助过我的人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM