applicationShouldTerminate

applicationShouldTerminate

所以,这是我的情况:

我正在开发一个基于非标准文档的应用程序,我想处理在任何文档中仍存在未保存的更改时中止终止的情况。

我最初的想法是:


用户尝试退出应用程序(通过"Quit XXXXX"菜单项或通过单击"X"按钮)
是否有任何修改过的文件?
如果否:退出
如果是:通知用户有未修改的文档。如果他想继续,请退出。否则取消终止。


因此,我决定采用委托方式。

在我的应用程序委托中,我实现了:


-windowToClose:(在NSWindowWillCloseNotification上触发)
applicationShouldTerminate:
applicationShouldTerminateAfterLastWindowClosed:


现在,这就是我的想法。在applicationShouldTerminate:方法中:


如果不存在修改过的文档,则返回NSTerminateNow
如果有修改过的文档,请返回NSTerminateCancel。在这种情况下,弹出警报表或类似的内容,如果用户确认要退出,则调用[NSApp terminate:nil];


这是正确的方法吗?

有什么建议么?

最佳答案

确实是这样做的。但是在您的applicationShouldTerminate实现中,您应该只是在此处弹出警报,如果用户没有单击“取消”,则返回NSTerminateNowNSTerminateCancel否则。以后无需手动终止应用程序。

编辑:将警报显示为工作表但将其作为模式对话框运行,请在警报上调用beginSheetModalForWindow,然后调用[NSApp runModalForWindow:alert]。此外,在为beginSheetModalForWindow传递的结尾选择器中,需要调用[NSApp stopModal]才能退出模态循环。

但是,在这种情况下,最好将警报作为窗口的表格运行,并在您的NSTerminateLater实现中返回applicationShouldTerminate。然后,在警报的结尾选择器中,调用[NSApp replyToApplicationShouldTerminate:]。这就是Apple建议您实施的方式。

10-08 19:01