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
中的主队列来解决此问题,但您可能需要在其他地方添加类似的调用。
我是 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
中的主队列来解决此问题,但您可能需要在其他地方添加类似的调用。