2011-09-19 113 views
3

我正在尝试创建一个需要定位到Mac OS X 10.5的Cocoa应用程序。我创建了一个新的Cocoa应用程序,它为我自动生成第一个窗体。如何在最后一个窗口关闭之前退出应用程序10.6

如果我建,它会工作得很好,直到我改变我的基地SDK 10.5,此时构建失败,出现“无法找到协议声明NSApplicationDelegate。”

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

我怀疑它是做的形式没有得到/处理退出事件;不过,我是Xcode的新手,所以我不确定窗口代码应该是什么样子,并且找到10.5的示例源已经证明很棘手。

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

回答

6

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

这与您是否声明符合该协议(在10.6以前的SDK中不存在正式协议,这就是您无法使用它的原因)无关。

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

然而,对于单一窗口的应用程序,它有一定道理关闭应用程序的主窗口退出应用程序。系统首选项和许多其他单窗口应用程序证明了这一点。

为了做到这一点,实行从委托的NSApplication协议的方法。

请注意我写这个的方式。该协议在10.6之前不是正式的协议,但它仍然存在 - 如an informal protocol。你不能声明符合它,但你仍然可以实现它的方法,NSApplication仍然会发送它的委托代理消息。

您需要您的应用程序的代表通过返回YES来响应applicationShouldTerminateAfterLastWindowClosed:

相关问题