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)
}
}
感谢所有帮助过我的人!
我目前正在尝试使用 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)
}
}
感谢所有帮助过我的人!