我正在尝试创建一个需要面向 Mac OS X 10.5 的 Cocoa 应用程序。我创建了一个新的 Cocoa 应用程序,它会自动为我生成第一个表单。
如果我构建,它将运行良好,直到我将基础 SDK 更改为 10.5,此时构建失败并显示“找不到 NSApplicationDelegate 的协议(protocol)声明”。
现在,我知道 NSApplicationDelegate 是 10.6 的一个功能。我搜索并发现其他人只是说删除 NSApplicationDelegate 协议(protocol)。我这样做了,它将构建并运行,但我无法让应用程序退出。如果我单击红色按钮关闭窗口,它会关闭,但停靠图标仍然存在。
我怀疑这与表单未获取/处理退出事件有关;然而,我是 Xcode 新手,所以我不确定窗口代码应该是什么样子,而且事实证明,找到 10.5 的示例源代码很棘手。
有人可以帮助我吗?提前致谢。
最佳答案
Now, I know that NSApplicationDelegate was a 10.6 feature. I've searched and found others who simply say to remove the NSApplicationDelegate protocol. I do that and it will build and run, but I can't get the app to exit. If I click the red button to close the window, it closes but the dock icon remains.
这与您是否声明遵守该协议(protocol)无关(该协议(protocol)在 10.6 之前的 SDK 中不作为正式协议(protocol)存在,这就是您无法使用它的原因)。
在 Mac 上,窗口和应用程序是两个不同的事物,因此关闭窗口和退出应用程序同样是两个不同的事物。应用程序拥有自己的窗口,因此退出应用程序将关闭其所有窗口(但是,如果应用程序支持 Lion 的状态恢复功能,则它们将在应用程序下次启动时返回)。关闭窗口不会退出应用程序。
但是,对于单窗口应用程序,关闭应用程序的主窗口以退出应用程序确实有意义。系统偏好设置和许多其他单窗口应用程序证明了这一点。
为此,请实现 NSApplication 委托(delegate)协议(protocol)中的方法。
注意我写的方式。该协议(protocol)在 10.6 之前并不是正式协议(protocol),但它仍然存在,如 an informal protocol 。你不能声明与它的一致性,但你仍然可以实现它的方法,并且 NSApplication 仍然会发送它的委托(delegate)委托(delegate)消息。
您需要应用程序的委托(delegate)通过返回 YES
来响应 applicationShouldTerminateAfterLastWindowClosed:
。
关于cocoa - 10.6 之前如何让应用程序在最后一个窗口关闭时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477298/