gpt4 book ai didi

objective-c - 如何正确处理Cocoa应用程序终止?

转载 作者:行者123 更新时间:2023-12-03 16:25:15 24 4
gpt4 key购买 nike

所以,这是我的案例:

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

我最初的想法是:

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

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

在我的应用程序委托(delegate)中,我已经实现了:

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

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

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

这是正确的做法吗?

有什么建议吗?

最佳答案

确实是这样的。但在您的 applicationShouldTerminate 实现中,您应该直接弹出警报,如果用户没有单击“取消”,则返回 NSTerminateNow;否则,NSTerminateCancel。稍后无需手动终止应用程序。

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

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

关于objective-c - 如何正确处理Cocoa应用程序终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com