applicationWillTerminate和dock但想要取消此操作

the*_*bot 1 macos cocoa quit

我的应用程序中有一些单独的线程需要正确拆卸.如果用户选择文件菜单中的退出菜单项,我会抛出一个错误,说明...请在退出之前停止其他事情.但是,如果用户从mac上的app dock退出应用程序,应用程序就会退出并最终崩溃,因为其他线程仍在尝试执行他们的操作而不会被正确拆除.

我尝试-applicationShouldTerminate:但是在使用app dock quit方法的情况下它没有触发...如果文档很脏.如果文档被清除又名保存,那么我的对话框会正确弹出.

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

谢谢

Chr*_*son 8

使用-applicationShouldTerminate:你的NSApplication代表是做正确的事.

但是,对于在Mac OS X 10.6及更高版本上构建的应用程序,您可能遇到了一个名为Sudden Termination的功能.它在Foundation Release Notes中非常简单地描述.

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

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

    // real task work

    [processInfo enableSuddenTermination];
}
Run Code Online (Sandbox Code Playgroud)

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

如果您在NSOperation或其子类中执行长时间运行的任务,最好只添加此支持,而不是将其单独添加到所有任务中.(不管忘记完成或取消任务,不要忘记重新启用突然终止.)