Swift 4 WebkitView URL 更改未完成其工作

Swift 4 WebkitView URL change not doing its job

我遇到了以下情况。

我正在使用 WebkitView 来显示一些会话信息。在大多数地方,它是在 ViewController 出现时生成的,但我有一个特定的视图,我必须在用户与更改为下个月或上个月的按钮交互时重新加载它。

我有以下代码:

// This is my connection to the storyboard element
@IBOutlet weak var areaNotasMes: WKWebView!

之后,我有一个函数可以执行 URL 处理:

func actualizarUrlNotasMes(fechaNueva: Date) {
    let formateadorAdicional = DateFormatter()
    formateadorAdicional.dateFormat = "yyyyMM"

    let url = URL(string: "https://myurl/\(formateadorAdicional.string(from: fechaNueva))")

    areaNotasMes.load(URLRequest(url: url!))
}

我有一个按钮事件,该事件将函数与下一个 YEAR_MONTH 组合结合使用,如下所示:

@IBAction func mesSigPressed(_ sender: UIButton) {
    // Some more code to get the fechaActual variable
    actualizarUrlNotasMes(fechaNueva: fechaActual)
    // Some more code
}

所以,基本上发生的事情是它在我第一次打开 ViewController 时加载,但是当我单击按钮更改为下个月时,日期会更改、正确生成并传递给功能。它生成正确的 URL,但是当 areaNotasMes.load(...) 函数运行时,WebKitView 上没有任何刷新。我尝试添加 areaNotasMes.reload(),但它也没有任何作用。每次更改 URL 时,我都必须喜欢销毁并重新创建 WebKitView 吗?还是我没有正确处理 URL 更改?

另外,控制台时不时会弹出一些这样的消息,并不总是:

[BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C5.1:2][0x7fea2d201de0] get output frames failed, state 8196
TIC Read Status [5:0x0]: 1:57

不,您不需要在更改 URL 时重新初始化 webview。我无法根据您提供的信息判断问题所在。我建议您将 ViewController 设置为 webview 的 navigationDelegate 并实施这些方法来尝试诊断问题:

func webView(WKWebView, didStartProvisionalNavigation: WKNavigation!)

func webView(WKWebView, didFail: WKNavigation!, withError: Error)
//Called when an error occurs during navigation.

 func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error)

文档here

我想我实际上设法以最随机的方式解决了这个问题。我想也许有一些重新加载功能(.reload()除外)所以使用自动完成语法,我想出了以下命令:

areaNotasMes.reloadInputViews()

显然 .reloadInputViews() 是一个继承自 UIView 的空函数,当对象是第一响应者时它会更新自定义输入和附件视图。您可以在这里查看:reloadInputViews()

它确实发送了一些 Error Domain=NSURLErrorDomain Code=-999 "(null)" 尽管它实际上按预期工作并刷新了 WebKitView 信息。

我希望这对其他人有帮助。