我正在为iOS开发一个简单的Web包装应用程序,但是WKWebView和WKNavigationDelegate出现了一些问题。我想使用WKNavigationDelegate中的didFinishNavigation函数,因此可以从导航中的URL查询(即会话GUID)中获取信息。当我注释掉“ webView.navigationDelegate = self”行时,我的程序可以正确启动并加载我的网页,但是当我包含它时,我的应用程序立即崩溃并出现以下错误:
" -[UIWebView setNavigationDelegate:]: unrecognized selector sent to instance
0x7f8251e058f0"
"*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[UIWebView setNavigationDelegate:]: unrecognized selector sent to
instance 0x7f8251e058f0'"
[我注意到,当我尝试使用WKWebView时,这两个错误消息都包含“ UIWebView”,因此我尝试从情节提要的身份检查器部分使用Webview上的“自定义类”字段,但是当我尝试在那之后运行,我得到“(lldb)”。任何帮助/见解将不胜感激,我在下面包括我的代码:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
webView.navigationDelegate = self
loadURL("http://mydomain/login.html")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
private func loadURL(targetURL: String){
if let url = NSURL(string: targetURL) {
let request = NSURLRequest(URL: url)
webView.loadRequest(request)
}
}
private func checkDomainGetSessionGUID(){
print ("we are here")
if let query = webView.URL?.query {
let queryArr = query.componentsSeparatedByString("&")
var parsedQuery : [String: String] = [:]
for field in queryArr {
let parts = field.componentsSeparatedByString("=")
parsedQuery.updateValue(parts[1], forKey: parts[0])
print ("key = \(parts[0]) and value = \(parts[1])")
}
}
else {
print ("didn't enter the if let")
}
}
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
print ("delegate")
checkDomainGetSessionGUID()
}
}
步骤1:
第1步:检查在Storyboard设计中使用的UIElement。如果您使用Web view而不是使用** WebKit View,则可能会出现此错误。请检查IBOutlet连接。
[步骤2:检查您的IOS部署目标,因为IOS 8中发布了UIWebKit View,所以它必须是IOS 11及更高版本,但是它包含仅在IOS 11中已修复的错误。因此,请将您的部署目标设置为11或更高。
第3步:检查您的info.plist属性。以下属性应添加到列表中
步骤2:
如果您希望将部署目标设置为IOS 10或IOS 11以下,则可以实现此目标
步骤1:使用其快速的ViewController文件创建一个新的UIViewcontroller。并添加下面给出的代码以运行您的URL:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}}
我希望这可能对您有帮助...