gpt4 book ai didi

macos - 窗口关闭时 window.beginSheet 崩溃

转载 作者:行者123 更新时间:2023-11-28 06:59:04 25 4
gpt4 key购买 nike

我在 Cocoa 中使用 Swift 打开模式表。它显示正常,但是当单击工作表上的按钮时,应用程序崩溃并显示 EXC_BAD_ACCESS。这是我为显示来自 AppDelegate.Swift 的工作表所做的工作:

  var preferencesController: PreferencesController?

@IBAction func showPreferencesWindow(sender: AnyObject) {
if let window = window {
let winController = PreferencesController()
window.beginSheet(winController.window!, completionHandler:
{(mr: NSModalResponse) -> Void in print("Closing: \(mr)")})
}
}

这是单击“确定”按钮的操作(工作表上的 NSButton):

@IBAction func okButtonClicked(button: NSButton) {
print("OK")
}

单击此按钮时,应用程序崩溃,即使它没有调用任何代码来实际关闭工作表。

提前致谢;已经尝试了很多东西,但一直令人沮丧。

最佳答案

我知道已经晚了,但我花了几个小时解决这个问题并找到了原因。

问题是 winController 是在 showPreferencesWindow 中定义的,并且会在方法完成时被销毁。由于 beginSheet 不会阻塞线程,这意味着 winController 几乎会立即被销毁。

解决方案是改用全局 preferencesController 变量。

固定代码:

var preferencesController: PreferencesController?

@IBAction func showPreferencesWindow(sender: AnyObject) {
if let window = window {
preferencesController = PreferencesController()
window.beginSheet(preferencesController!.window!, completionHandler:
{(mr: NSModalResponse) -> Void in print("Closing: \(mr)")})
}
}

关于macos - 窗口关闭时 window.beginSheet 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513200/

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