gpt4 book ai didi

cocoa - applicationWillTerminate 和扩展坞但想要取消此操作

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

我的应用程序中有一些单独的线程需要正确拆除。如果用户在文件菜单中选择退出菜单项,我会抛出一个错误,提示...请在退出之前停止您正在执行的其他操作。但是,如果用户从 Mac 上的应用程序底座退出该应用程序,该应用程序就会退出并最终崩溃,因为其他线程仍在尝试执行其操作而没有被正确拆除。

我尝试了 -applicationShouldTerminate: 但在使用应用程序停靠退出方法的情况下它不会触发...如果文档脏了。如果文档被清理或保存,那么我的对话框会正确弹出。

所以我想真正的问题是:在我们发现文档仍然很忙之前,如何停止“您想保存文档”查询吗?

谢谢

最佳答案

在 NSApplication 委托(delegate)中使用 -applicationShouldTerminate: 是正确的做法。

但是,对于在 Mac OS X 10.6 及更高版本上构建的应用程序,您可能会遇到一个名为“突然终止”的功能。 Foundation Release Notes 中对此进行了非常简单的描述。 .

结果是您的后台任务应该防止突然终止:

- (void)longRunningTask {
NSProcessInfo *processInfo = [NSProcessInfo processInfo];
[processInfo disableSuddenTermination];

// real task work

[processInfo enableSuddenTermination];
}

这样,当您要求应用程序在繁忙时退出时,将适本地发送 -terminate: ,这将依次调用您的 NSApplication 委托(delegate)的 -applicationShouldTerminate: ,这将允许您优雅地停止任务或要求用户取消它们。

如果您在 NSOperation 或其子类中执行长时间运行的任务,最好只是一般性地添加此支持,而不是将其单独添加到所有任务中。 (无论任务如何停止、完成还是取消,都不要忘记重新启用突然终止。)

关于cocoa - applicationWillTerminate 和扩展坞但想要取消此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4543087/

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