我的应用程序中有一些单独的线程需要正确拆卸.如果用户选择文件菜单中的退出菜单项,我会抛出一个错误,说明...请在退出之前停止其他事情.但是,如果用户从mac上的app dock退出应用程序,应用程序就会退出并最终崩溃,因为其他线程仍在尝试执行他们的操作而不会被正确拆除.
我尝试-applicationShouldTerminate:但是在使用app dock quit方法的情况下它没有触发...如果文档很脏.如果文档被清除又名保存,那么我的对话框会正确弹出.
所以我想真正的问题是:在我们发现文档仍然繁忙之前,如何停止"你想保存文档"查询?
谢谢
使用-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或其子类中执行长时间运行的任务,最好只添加此支持,而不是将其单独添加到所有任务中.(不管忘记完成或取消任务,不要忘记重新启用突然终止.)