iOS-[WKWebView .cxx_construct]仅可从主线程使用

时间:2018-10-12 12:24:35

标签: ios swift webkit wkwebview

我是iOS开发的新手。

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

现在,应用程序崩溃时说: [WKWebView .cxx_construct]仅可在此代码(功能的第一行)中从主线程使用

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

是什么导致此问题?为什么以前可以正常工作?为什么突然停止工作?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您应该在 MainThread 中处理UI。

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