gpt4 book ai didi

swift - 在 Swift 4 中创建 WKPreferences 变量时如何修复 "EXC_BAD_ACCESS"

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:09 25 4
gpt4 key购买 nike

在我的代码中,我有一部分使用特定的 WKWebViewConfiguration 创建一个新的 WKWebView,而后者又有一个 WKPreferences 引用。然后所有这些都被添加到应用程序的 View 中。

问题是,到目前为止,我的代码一直运行完美,没有任何问题。

现在,出于一些奇怪的原因,当我启动应用程序时,我明白了

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeec686fc0)

在我为 WKPreferences 创建变量时在线上。

我正在使用 Xcode 10.1Swift 4,并且安装了 AlamofireNetworkReachability pod。我试过在没有 WKPreferences 的情况下只创建 WKWebView,但错误只是转移到 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()
}

预期的行为是应用程序将启动并显示网页,该网页不会更改,在代码的其他地方指定。实际结果是应用程序在启动时崩溃并出现 EXC_BAD_ACCESS 错误。

最佳答案

我不得不说你发现了一个错误。出于某种原因,运行时不允许您在应用程序生命周期的早期创建 WKPreferences 对象。

解决方法是您必须推迟创建 WebView ,直到应用启动并运行。为此,删除 loadView 并改为实现 viewDidLoad,并在那里完成所有工作,使 Web View 成为主视图的 subview 而不是而不是试图让它成为主视图。

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 提交错误报告,但至少这会让您暂时坚持下去。

关于swift - 在 Swift 4 中创建 WKPreferences 变量时如何修复 "EXC_BAD_ACCESS",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53938983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com