我正在使用Swift开发Cocoa应用程序。该应用程序打开一个窗口,用户可以使用菜单打开另一个窗口。问题是当使用红色按钮关闭任一窗口时,应用程序终止。我不想要这种行为;我希望应用程序保持活力。它并没有崩溃; AppDelegate的applicationWillTerminate方法执行。
AppDelegate的方法是applicationShouldTerminateAfterLastWindowClosed,它返回false,但是这个方法永远不会被执行。
我是一个相当称职的Swift iOS开发人员;这是我的第一个真正的Cocoa应用程序,我怀疑这很简单,但我现在感到困惑。如何在不完全终止应用程序的情况下关闭窗口?
编辑:以下是一些代码段:
在AppDelegate中:
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
Log.methodEnter()
return false
}
同样在AppDelegate中,打开一个窗口的方法:
@IBAction func openVerbSettingsWindow(sender: NSMenuItem) {
verbSettingsWindowController.showWindow (nil)
}
从windowViewController中,窗口加载和显示时执行任何操作的唯一方法:
override func windowDidLoad() {
super.windowDidLoad()
window?.setFrame(NSMakeRect(400.0, 100.0, 950.0, 450.0), display: true)
}
我希望这会有所帮助!
答案 0 :(得分:0)
我对这个问题的回答并不感到尴尬;它与Cocoa或我的代码无关。
我有一个名为RedQuits的应用程序,它配置OS X以在该应用程序的最后一个窗口关闭时关闭应用程序,而不是让应用程序在没有窗口的情况下运行(OS X默认行为)。当我摆脱RedQuits并重新启动以便OS X恢复其默认行为时,问题就消失了。出于某种原因,当任何应用程序窗口关闭时,RedQuits会导致我的Cocoa应用程序退出。有趣的是,我发现这是因为它在Xcode中导致相同的行为:关闭一个项目窗口并关闭Xcode。