2

所以,这是我的情况:

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

我最初的想法是:

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

因此,我决定以委托方式进行。

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

  • -windowToClose:(触发NSWindowWillCloseNotification
  • applicationShouldTerminate:
  • applicationShouldTerminateAfterLastWindowClosed:

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

  • NSTerminateNow如果不存在修改过的文档则返回
  • NSTerminateCancel如果有修改过的文档则返回。在这种情况下,弹出一个警告表或类似的东西,如果用户确认他想退出,然后调用[NSApp terminate:nil];

这是正确的方法吗?

有什么建议么?

4

1 回答 1

7

这确实是如何做到的。但是在您的applicationShouldTerminate实现中,您应该在此处弹出警报,NSTerminateNow如果用户没有单击取消则返回;NSTerminateCancel除此以外。以后无需手动终止应用程序。

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

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

于 2012-04-19T08:21:58.737 回答