WKWebView因某些查询而崩溃(iOS Swift)



我正在为婴儿名字开发一个类似火绒的滑动应用程序。我创建了一个方法,当你点击你最喜欢的名字旁边的一个按钮时,它会弹出一个窗口(一个带有WKWebView的UIViewController(,显示带有这个特定名字含义的谷歌搜索。

问题是,对于某些名称,应用程序会崩溃,因为URL返回nil。我不明白发生了什么,因为其他名字都很好用。我发现这种情况发生在斯堪的纳维亚的名字上,比如";OddVeig";以及";OddLaug"。

下面是我的UIViewController类,它会弹出搜索结果(我已经将所有初始化代码都放在layoutSubViews((中,因为我在iOS 12中遇到了一些问题,如果我将WKWebView放在viewDidLoad((中的话,WKWebView的大小将不会正确调整(:

import UIKit
import WebKit
class WebViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var webContainer: UIView!
var webView : WKWebView!
var query : String?

override func viewDidLoad() {
super.viewDidLoad()
}

override func viewDidLayoutSubviews() {
webView = WKWebView()
webView.navigationDelegate = self
webContainer.addSubview(webView)
self.view.alpha = 0.9

webView.frame = self.view.frame
webView.layer.position.y += 20
let slideDownImage = UIButton(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30))
slideDownImage.setImage(UIImage(named: "slideIconWhite"), for: .normal)
slideDownImage.imageView?.contentMode = .scaleAspectFit
if let n = query {
let url = URL(string: "https://www.google.com/search?q=(n)")! // Causing error: Found nil
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
}
webContainer.addSubview(slideDownImage)
slideDownImage.frame = CGRect(x: 0, y: 0, width: self.webView.frame.size.width, height: 20)
slideDownImage.backgroundColor = .gray
slideDownImage.alpha = 0.7
slideDownImage.addTarget(self, action: #selector(slideDown), for: .touchUpInside)
}

@objc func slideDown() {
self.dismiss(animated: true, completion: nil)
}

}

我在FavoritesViewController类中使用一个segue,如下所示:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "favoritesToWeb" {
let destination = segue.destination as! WebViewController
destination.query = "(searchName)+(NSLocalizedString("meaning", comment: "meaning"))"
}
}

希望有人能告诉我我做错了什么。提前谢谢。

Patrick

query变量需要进行百分比编码,我想当查询字符串中有空白字符时,这一定会崩溃。使用addingPercentEncoding为查询字符串添加百分比编码。

参考API:https://developer.apple.com/documentation/foundation/nsstring/1411946-addingpercentencoding

相关问题:敏捷的URL返回零

最新更新