gpt4 book ai didi

ios - WKNavigationDelegate 应用程序在分配时崩溃

转载 作者:行者123 更新时间:2023-12-01 16:15:06 28 4
gpt4 key购买 nike

我正在为 iOS 开发一个简单的 Web 包装器应用程序,但我在使用 WKWebView 和 WKNavigationDelegate 时遇到了一些问题。我想使用 WKNavigationDelegate 的 didFinishNavigation 函数,这样我就可以从导航的 URL 查询中获取信息(即 session 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”,因此我尝试从 Storyboard的身份检查器部分使用 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设计中使用的 UIElements。如果您使用 Web View 而不是使用 **WebKit View ,则可能会出现此错误。检查您的 IBOutlet 连接。

步骤 2:检查您的 IOS 部署目标,它必须是 IOS 11 及更高版本,因为 UIWebKit View 是在 IOS 8 中发布的,但它包含一个仅在 IOS 11 中修复的错误。因此,将您的部署目标设置为 11 及以上。

第 3 步:检查您的 info.plist 属性。以下属性应添加到列表中 App Transport Security Settings -> Allow Arbitrary Loads -> YES

程序 2:

如果您希望部署目标为 IOS 10 或低于 IOS 11 意味着您可以这样实现

步骤 1:使用其 swift 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)
}}

我希望这可能对你有帮助......

关于ios - WKNavigationDelegate 应用程序在分配时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996538/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com