Xcode Swift - WKWebView 实现

Xcode Swift - WKWebView implementation

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

2021-01-12 16:24:40.981110+0100 SmartMirror[2078:1089320] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[WKWebView view]: unrecognized selector sent to instance 0x11380c400'

我还使用了 activity 指示器,它应该在页面加载之前显示。这是我的代码: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
            }
            
        }
        
    }
    
}

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

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

不胜感激!

真诚的, 卢卡斯

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[WKWebView view]: unrecognized selector sent to instance

您可能知道,这是因为有人向您的 Web 视图发送 -view 消息,而该视图没有该名称的方法。但是,UIViewController 有这样的方法,因此可以很好地猜测您的应用程序中的某个地方,您的 Web 视图被误认为是视图控制器。我没有在您发布的代码中看到这种情况,而且很难从故事板的图像中看出任何东西。

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

我现在已经完全重新创建了整个应用程序,现在可以正常使用了。当我为这三个页面创建 ViewController 时,似乎出了点问题。这次我也保留了原来的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)
    }
    
}

感谢所有帮助过我的人!