我是iOS开发的新手。
我遵循了本教程:https://www.ioscreator.com/tutorials/webview-ios-tutorial-ios11,以使用Web视图创建应用程序。它工作正常,但突然停了下来,我不知道有什么不同。
现在,应用程序崩溃时说: [WKWebView .cxx_construct]仅可在此代码(功能的第一行)中从主线程使用:
override func loadView() {
viewerWebKit = WKWebView()
viewerWebKit.navigationDelegate = self
view = viewerWebKit
}
是什么导致此问题?为什么以前可以正常工作?为什么突然停止工作?
答案 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
})