Cocoa applicationWillTerminate和dock,但希望取消此操作
我的应用程序中有一些单独的线程需要正确地删除。 如果用户在“文件”菜单中选择“退出”菜单项,我会抛出一个错误,上面写着。。。在退出之前,请停止你正在做的其他事情。但是,如果用户从mac上的应用程序坞中退出应用程序,应用程序就会退出,并最终崩溃,因为其他线程仍在尝试执行它们的操作,而没有被正确地拆除 我尝试了Cocoa applicationWillTerminate和dock,但希望取消此操作,cocoa,macos,quit,Cocoa,Macos,Quit,我的应用程序中有一些单独的线程需要正确地删除。 如果用户在“文件”菜单中选择“退出”菜单项,我会抛出一个错误,上面写着。。。在退出之前,请停止你正在做的其他事情。但是,如果用户从mac上的应用程序坞中退出应用程序,应用程序就会退出,并最终崩溃,因为其他线程仍在尝试执行它们的操作,而没有被正确地拆除 我尝试了-应用程序应该终止:,但在使用app dock quit方法的情况下它不会触发。。。如果文件脏了。如果文档已保存,则正确弹出“我的对话框” 因此,我想真正的问题是:在我们发现文档仍然很忙之前,
-应用程序应该终止:
,但在使用app dock quit方法的情况下它不会触发。。。如果文件脏了。如果文档已保存,则正确弹出“我的对话框”
因此,我想真正的问题是:在我们发现文档仍然很忙之前,如何停止“do you want save your document”查询
感谢使用
-应用程序应终止:
在您的NSApplication委托中是正确的做法
然而,对于构建在Mac OS X 10.6及更高版本上的应用程序,您可能会遇到一种称为“突然终止”的功能。书中对它的描述相当直截了当
结果是,您的后台任务应防止突然终止:
- (void)longRunningTask {
NSProcessInfo *processInfo = [NSProcessInfo processInfo];
[processInfo disableSuddenTermination];
// real task work
[processInfo enableSuddenTermination];
}
这样,当您在应用程序繁忙时要求其退出时,应用程序将被适当地发送到-terminate:
,这将反过来调用您的NSApplication委托的-application-shouldtimate:
,这将允许您优雅地停止任务或要求用户取消任务
如果您在NSOperation或其子类中执行长时间运行的任务,最好只添加此支持,而不是单独将其添加到所有任务中。(无论任务如何停止,无论任务是完成还是取消,都不要忘记重新启用突然终止。)在NSApplication委托中使用
-应用程序应终止:
然而,对于构建在Mac OS X 10.6及更高版本上的应用程序,您可能会遇到一种称为“突然终止”的功能。书中对它的描述相当直截了当
结果是,您的后台任务应防止突然终止:
- (void)longRunningTask {
NSProcessInfo *processInfo = [NSProcessInfo processInfo];
[processInfo disableSuddenTermination];
// real task work
[processInfo enableSuddenTermination];
}
这样,当您在应用程序繁忙时要求其退出时,应用程序将被适当地发送到-terminate:
,这将反过来调用您的NSApplication委托的-application-shouldtimate:
,这将允许您优雅地停止任务或要求用户取消任务
如果您在NSOperation或其子类中执行长时间运行的任务,最好只添加此支持,而不是单独将其添加到所有任务中。(无论任务如何停止,无论任务是完成还是取消,都不要忘记重新启用突然终止。)上一篇StackOverflow文章可能会有帮助:
选择“退出”菜单项时,您可以覆盖默认事件处理程序。前面的StackOverflow帖子可能会有帮助: 选择“退出”菜单项时,可以覆盖默认事件处理程序