如何在10.6之前关闭最后一个窗口时退出应用程序

时间:2011-09-19 21:07:05

标签: cocoa osx-leopard

我正在尝试创建一个需要针对Mac OS X 10.5的Cocoa应用。我创建了一个新的Cocoa应用程序,它为我自动生成第一个表单。

如果我构建,它将运行良好,直到我将基本SDK更改为10.5,此时构建失败并显示“无法找到NSApplicationDelegate的协议声明。”

现在,我知道NSApplicationDelegate是一个10.6的功能。我搜索并发现其他人只是说要删除NSApplicationDelegate协议。我这样做,它将构建和运行,但我无法让应用程序退出。如果我单击红色按钮关闭窗口,它会关闭,但停靠图标仍然存在。

我怀疑它与表单没有获取/处理退出事件有关;但是,我是Xcode的新手,所以我不确定窗口代码应该是什么样子,找到10.5的样本源已经证明是棘手的。

任何人都可以帮助我吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

  

现在,我知道NSApplicationDelegate是一个10.6的功能。我搜索并发现其他人只是说要删除NSApplicationDelegate协议。我这样做,它将构建和运行,但我无法让应用程序退出。如果我单击红色按钮关闭窗口,它会关闭,但停靠图标仍然存在。

这与您是否声明符合该协议(在早于10​​.6的SDK中不存在正式协议,这就是您无法使用它)无关。

在Mac上,Windows和应用程序是两回事,因此关闭窗口并退出应用程序同样是两件事。应用程序拥有Windows,因此退出应用程序将关闭其所有窗口(但是,如果应用程序支持Lion的状态恢复功能,它们将在下次启动应用程序时返回)。关闭窗口不会退出应用程序。

但是,对于单窗口应用程序,关闭应用程序的主窗口以退出应用程序是有意义的。系统偏好设置和众多其他单窗口应用程序证明了这一点。

为此,请从NSApplication委托协议实现方法。

请注意我写的方式。该协议不是10.6之前的正式协议,但它仍然存在 - an informal protocol。您无法声明对它的一致性,但您仍然可以实现其方法,NSApplication仍将发送其委托委托消息。

您需要申请人的代表回复applicationShouldTerminateAfterLastWindowClosed:才能回复YES