在我的代码中,我有一个部分可以创建一个带有特定WKWebView
的新WKWebViewConfiguration
,而后者又有一个WKPreferences
引用。然后将所有这些添加到应用程序的视图中。
问题在于,到目前为止,我的代码一直运行良好,没有问题。
现在,出于某些奇怪的原因,当我启动该应用程序时, 我得到
线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffeec686fc0)
在为WKPreferences
创建变量时在线。
我正在使用Xcode 10.1
,Swift 4
,并且已经安装了Alamofire
和NetworkReachability
吊舱。我尝试仅创建没有WKWebView
的{{1}},但是错误只是移至WKPreferences
。
WKWebViewConfiguration
预期的行为是该应用程序将启动并显示代码中其他地方指定的不变的网页。实际结果是该应用程序在启动时因func createWebView() {
let preferences = WKPreferences() //<-- EXC_BAD_ACCESS
preferences.javaScriptEnabled = true
let webConfiguration = WKWebViewConfiguration()
webConfiguration.preferences = preferences
webConfiguration.allowsInlineMediaPlayback = true
webViewVar = WKWebView(frame: self.view.bounds, configuration: webConfiguration)
webViewVar.uiDelegate = self
self.view = webViewVar
}
override func loadView() {
createWebView()
}
错误而崩溃。
答案 0 :(得分:5)
我不得不说你发现了一个错误。由于某些原因,运行时不允许您在应用程序的早期阶段创建WKPreferences对象。
解决方法是您必须推迟创建Web视图,直到应用程序启动并运行。为此,请删除loadView
并实施viewDidLoad
,然后执行所有工作,使Web视图成为主视图的 subview ,而不是尝试使其成为< em>成为主视图。
var webViewVar : WKWebView!
func createWebView() {
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let webConfiguration = WKWebViewConfiguration()
webConfiguration.preferences = preferences
webConfiguration.allowsInlineMediaPlayback = true
webViewVar = WKWebView(frame: self.view.bounds, configuration: webConfiguration)
webViewVar.uiDelegate = self
self.view.addSubview(webViewVar)
webViewVar.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
override func viewDidLoad() {
super.viewDidLoad()
createWebView()
}
这很烦人,您应该向Apple提交错误报告,但这至少可以使您暂时工作。