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

WKWebView crashing with certain queries (iOS Swift)

我正在开发一个类似 tinder 的 babynames 刷卡应用程序。我创建了一个方法,当你点击一个你最喜欢的名字旁边的按钮时,它会弹出一个 window(一个带有 WKWebView 的 UIViewController),显示一个 google 搜索,其含义如下特定名称。

问题是,对于某些名称,应用程序会崩溃,因为 URL returns 为零。我不明白发生了什么,因为其他名字工作得很好。我发现它发生在斯堪的纳维亚名字中,例如“OddVeig”和“OddLaug”。

下面是我的 UIViewController class 随搜索结果弹出(我将所有初始化代码放在 layoutSubViews() 中,因为我在 iOS 12 中遇到了一些问题,其中如果我将它放在 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 class 中使用 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"))"
    }
}

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

帕特里克

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

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

相关问题: