在Swift 4中创建WKPreferences变量时如何修复“ EXC_BAD_ACCESS”

时间:2018-12-27 02:03:26

标签: swift wkwebview wkwebviewconfiguration

在我的代码中,我有一个部分可以创建一个带有特定WKWebView的新WKWebViewConfiguration,而后者又有一个WKPreferences引用。然后将所有这些添加到应用程序的视图中。

问题在于,到目前为止,我的代码一直运行良好,没有问题。

现在,出于某些奇怪的原因,当我启动该应用程序时, 我得到

  

线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffeec686fc0)

在为WKPreferences创建变量时在线。

我正在使用Xcode 10.1Swift 4,并且已经安装了AlamofireNetworkReachability吊舱。我尝试仅创建没有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() } 错误而崩溃。

1 个答案:

答案 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提交错误报告,但这至少可以使您暂时工作。