-1

我正在尝试检测对 WKWebView 中链接的点击并在另一个 WKWebView 中加载相应的 URL。我能够获取点击的 URL 并创建 URL 请求,但加载 URLRequest 总是失败并出现相同的错误:

致命错误:在隐式展开 Optional 值时意外发现 nil。

这很奇怪,因为当我打印 URLRequest 变量的值时,我可以看到它根本不是 nil。

let navigationController = self.navigationController
self.navigationController?.setToolbarHidden(false, animated: false)
let autoLinkUrl = (messageBody!["autoLinkUrl"] as? String)!
print(autoLinkUrl) /* prints: https://news.ycombinator.com/ */
            
if let requestURL = URL(string: autoLinkUrl) {
  print(requestURL) /* prints: https://news.ycombinator.com/ */
  let request : URLRequest? = URLRequest(url: requestURL)
  print(request) /* prints: Optional(https://news.ycombinator.com/) */
  self.websiteRecordingVC!.webView.load(request!) /* Fatal error is raised here */
  navigationController!.pushViewController(self.websiteRecordingVC!, animated: true)
}

欢迎任何帮助。非常感谢。

4

1 回答 1

0

在您的代码中,您不必要地强制展开( !) optional,这是非常不推荐的。过度使用强制展开并不是一个好的编码习惯。它可能会导致您的应用出现意外崩溃。

您必须使用可选绑定( if-let) 和可选链接来优雅地处理optionals.

if let requestURL = URL(string: autoLinkUrl) {
    let request = URLRequest(url: requestURL)
    if let vc = self.websiteRecordingVC {
        vc.webView.load(request)
        navigationController?.pushViewController(vc, animated: true)
    }
}

另外,在您websiteRecordingVC检查所有IBOutlets连接是否正确。

于 2020-09-02T05:25:53.940 回答