Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否在主窗口关闭时退出Cocoa应用程序?_Objective C_Cocoa - Fatal编程技术网

Objective c 是否在主窗口关闭时退出Cocoa应用程序?

Objective c 是否在主窗口关闭时退出Cocoa应用程序?,objective-c,cocoa,Objective C,Cocoa,如何使Cocoa应用程序在主窗口关闭时退出?否则,您必须单击应用程序图标并在菜单中单击退出。您可以实现应用程序应在LastWindowClosed后终止:以在应用程序的委托中返回YES。但在这样做之前,我会三思而后行,因为在Mac电脑上,除了计算器等小型“实用”应用程序之外,这真的很不寻常,大多数Mac用户不会欣赏你的应用程序表现得如此奇怪。你应该在主窗口上安装一个IBOutlet。例如:IBMOutlet NSWindow*主窗口 - (void)awakeFromWindow { [

如何使Cocoa应用程序在主窗口关闭时退出?否则,您必须单击应用程序图标并在菜单中单击退出。

您可以实现
应用程序应在LastWindowClosed后终止:
以在应用程序的委托中返回YES。但在这样做之前,我会三思而后行,因为在Mac电脑上,除了计算器等小型“实用”应用程序之外,这真的很不寻常,大多数Mac用户不会欣赏你的应用程序表现得如此奇怪。

你应该在主窗口上安装一个IBOutlet。例如:IBMOutlet NSWindow*主窗口

- (void)awakeFromWindow {
    [mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
    [NSApp terminate:self];
}

如果此操作不起作用,则应在NSNotificationCenter中添加一名观察员,用于通知NSWindowWillCloseNotification。别忘了检查右窗口是否关闭。

将此代码段添加到应用程序的代理中:

-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app {
    return YES;
}

因为问题主要是关于Cocoa编程,而不是具体的 语言(Objective-C),这是Chuck和Steve的快速版本 答复:

对于Swift 3将方法定义更改为

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
}
这对我有用

extension MainWindowController: NSWindowDelegate {
    func windowWillClose(_ notification: Notification) {
        if let window = notification.object as? NSWindow, let controller = window.windowController {

            if window == self.window {

                for window in self.childWindows {

                    print(" Closing \(window)")
                    window.close()

                }

            }
        }
    }
}

尽管这是一个有效的问题,但还是要重新考虑。如果你的应用程序需要其主窗口始终存在,请禁用关闭它的功能。公平地说,我会这样做。非常感谢。我不同意。在大多数单窗口应用程序中,包括计算器和(现在的)系统首选项,您可以关闭窗口,这样做会退出应用程序。我个人也曾使用过相反的应用程序,当我试图关闭主窗口并收到一声蜂鸣而不是我想要的关闭/退出时,我感到很沮丧。事实上,苹果曾经拒绝过我的应用程序,并建议我实现这一点。他们说我需要一个清晰的方法来重新打开主窗口,或者实现“ApplicationsShouldTerminateAfterLastWindowClosed”@nute:是的,应该有一个简单的方法来重新打开窗口。如果你点击图标却什么也没发生的应用程序是不好的。这与说应用程序通常应该在最后一个窗口关闭时退出相去甚远。这并没有解决在主窗口关闭时如何关闭应用程序的问题-这只解决了最后一个窗口关闭时的问题。我添加了这个答案是出于元问题的精神,因为我结束了一个较新的问题,明确要求使用Swift代码作为此问题的副本。Swift 3要求在发件人文本前加下划线和空格。您节省了我的时间和生命!谢谢
extension MainWindowController: NSWindowDelegate {
    func windowWillClose(_ notification: Notification) {
        if let window = notification.object as? NSWindow, let controller = window.windowController {

            if window == self.window {

                for window in self.childWindows {

                    print(" Closing \(window)")
                    window.close()

                }

            }
        }
    }
}