【发布时间】:2021-05-10 11:45:50
【问题描述】:
我正在为婴儿名字开发一个类似火种的滑动应用程序。我创建了一个方法,当您单击您最喜欢的名称之一旁边的按钮时,它会弹出一个窗口(带有 WKWebView 的 UIViewController),其中显示具有此特定名称含义的 google 搜索。
问题在于,对于某些名称,应用程序会崩溃,因为 URL 返回 nil。我不明白发生了什么,因为其他名称工作得很好。我发现像“OddVeig”和“OddLaug”这样的斯堪的纳维亚名字会发生这种情况。
下面是我的 UIViewController 类,它与搜索结果一起弹出(我已将所有初始化代码放在 layoutSubViews() 中,因为我在 iOS 12 中遇到了一些问题,如果我放 WKWebView 将无法正确调整大小它在 viewDidLoad() 中):
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"))"
}
}
希望有人能告诉我我做错了什么。 提前致谢。
帕特里克
【问题讨论】:
-
您不能在 viewDidLayoutSubviews 方法中添加这样的代码。只需在 viewDidLayoutSubviews 方法中管理和设置框架,否则将其他代码添加到 viewDidLoad。
-
导致应用程序崩溃的实际 URL 是什么?你为什么要强制解开 url?
-
以下是错误的。 destination.query = "(searchName)+(NSLocalizedString("meaning", comment: "meaning"))"
-
destination.query = searchName + "+" + NSLocalizedString("meaning", comment: "meaning")
-
@RajaKishan 谢谢。我在我的代码中对其进行了编辑,因此 didLayoutSubviews 仅包含对框架的更改。