iOS - [WKWebView .cxx_construct] 只能在主线程中使用

iOS - [WKWebView .cxx_construct] must be used from main thread only

我是 iOS 开发的新手。

我遵循了本教程:https://www.ioscreator.com/tutorials/webview-ios-tutorial-ios11 来创建具有 Web 视图的应用程序。它工作正常,但突然停止了,我不知道有什么不同。

现在应用程序崩溃说:[WKWebView .cxx_construct] 必须仅从主线程使用 在这段代码中(函数的第一行):

override func loadView() {
    viewerWebKit = WKWebView()
    viewerWebKit.navigationDelegate = self
    view = viewerWebKit
}

是什么导致了这个问题?为什么之前运行良好?为什么它突然停止工作了?

你应该在 MainThread 中处理 UI。

dispatch_async(dispatch_get_main_queue(), {
 Some UI code here
})

您好请记住,如果您想进行 UI 修改或创建,则必须仅使用主线程来完成,在您的情况下,您确实提到 Ui 修改必须由主线程完成仅线程 enter code here

override func loadView() {
  DispatchQueue.main.async {
    viewerWebKit = WKWebView()
    viewerWebKit.navigationDelegate = self
    view = viewerWebKit
  }
}

@lokesh 的回答是正确的方向,但是错误的解决方案。 loadView() 似乎是在非主线程上调用的。这永远不应该发生。一个原因是您手动调用 loadView() (您永远不应该这样做)。另一个是您在后台线程上引用 view,您也不应该这样做。 (这是我怀疑你正在做的。)

在崩溃前的 loadView 中放置一个断点。 运行 程序,并确保它在主线程上。在不存在的调用中,回溯到您错误调用它的位置。您不应该通过调度到 loadView 中的主队列来解决此问题,但您可能需要在其他地方添加类似的调用。