1

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

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

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

谢谢

4

2 回答 2

8

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

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

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

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

    // real task work

    [processInfo enableSuddenTermination];
}

这样,-terminate:当您要求它在忙碌时退出时,您的应用程序将被适当地发送,这将反过来调用您的 NSApplication 委托-applicationShouldTerminate:,这将允许您优雅地停止您的任务或要求用户取消它们。

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

于 2010-12-28T02:08:29.770 回答
0

以前的 StackOverflow 帖子可能会有所帮助:

应用程序退出事件

选择退出菜单项时,您可以覆盖默认事件处理程序。

于 2010-12-28T02:08:59.113 回答