【问题标题】:Unwrapped URLRequest is always nil未包装的 URLRequest 始终为 nil
【发布时间】:2020-09-01 23:25:10
【问题描述】:

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

致命错误:在隐式展开时意外发现 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)
}

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

【问题讨论】:

  • 也许self.websiteRecordingVCnil
  • 摆脱它!在网站RecordingVC!。对于视图,您永远不应该使用它。如果您以编程方式创建视图,请确保您在情节提要上正确连接它或正确实例化它。
  • websiteRecordingVC 变量工作正常。我能够毫无问题地在不同的视图控制器之间切换(除了这个自动链接用例)。删除“!”来自网站RecordingVC!给出了一个新错误,所以我不确定这会解决我的问题。由于它在应用程序的其他部分中正常工作,我认为最好保持原样。感谢您的帮助!

标签: ios swift xcode urlrequest swift-optionals


【解决方案1】:

在您的代码中,您不必要地强制展开 (!) 每隔一个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 都已正确连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多