我正在尝试创建一个需要针对Mac OS X 10.5的Cocoa应用。我创建了一个新的Cocoa应用程序,它为我自动生成第一个表单。
如果我构建,它将运行良好,直到我将基本SDK更改为10.5,此时构建失败并显示“无法找到NSApplicationDelegate的协议声明。”
现在,我知道NSApplicationDelegate是一个10.6的功能。我搜索并发现其他人只是说要删除NSApplicationDelegate协议。我这样做,它将构建和运行,但我无法让应用程序退出。如果我单击红色按钮关闭窗口,它会关闭,但停靠图标仍然存在。
我怀疑它与表单没有获取/处理退出事件有关;但是,我是Xcode的新手,所以我不确定窗口代码应该是什么样子,找到10.5的样本源已经证明是棘手的。
任何人都可以帮助我吗?提前谢谢。
答案 0 :(得分:6)
现在,我知道NSApplicationDelegate是一个10.6的功能。我搜索并发现其他人只是说要删除NSApplicationDelegate协议。我这样做,它将构建和运行,但我无法让应用程序退出。如果我单击红色按钮关闭窗口,它会关闭,但停靠图标仍然存在。
这与您是否声明符合该协议(在早于10.6的SDK中不存在正式协议,这就是您无法使用它)无关。
在Mac上,Windows和应用程序是两回事,因此关闭窗口并退出应用程序同样是两件事。应用程序拥有Windows,因此退出应用程序将关闭其所有窗口(但是,如果应用程序支持Lion的状态恢复功能,它们将在下次启动应用程序时返回)。关闭窗口不会退出应用程序。
但是,对于单窗口应用程序,关闭应用程序的主窗口以退出应用程序是有意义的。系统偏好设置和众多其他单窗口应用程序证明了这一点。
为此,请从NSApplication委托协议实现方法。
请注意我写的方式。该协议不是10.6之前的正式协议,但它仍然存在 - an informal protocol。您无法声明对它的一致性,但您仍然可以实现其方法,NSApplication仍将发送其委托委托消息。
您需要申请人的代表回复applicationShouldTerminateAfterLastWindowClosed:
才能回复YES
。