如何在NSOperationQueues上自动安装NSExceptionHandlers?

时间:2012-08-30 14:53:10

标签: objective-c multithreading macos cocoa exception

长时间潜伏,第一次海报。

我正在编写一个可可应用程序,它大量使用NSOperationQueues来管理后台任务。这个应用程序是一个更旧的应用程序的重写,使用手动管理的NSThreads来完成类似的事情。

其中一个要求是我们捕获/记录所有未捕获的异常以避免应用程序终止。在旧版本的应用程序中,我们将使用NSExceptionHandler API安装所有线程的异常陷阱。既然我们从线程中删除了一个抽象级别,我就无法访问该线程对象(实际上,我的印象是队列使用的线程可能会因操作调用而改变)。

当后台操作失败时,保持我的应用程序崩溃的建议/最佳方法是什么?

如果重要,部署在Mac OS X 10.6上。

1 个答案:

答案 0 :(得分:1)

我使用以下内容为自己解决了这个问题:

NSInteger mask = (NSLogUncaughtExceptionMask| NSHandleUncaughtExceptionMask | NSLogUncaughtSystemExceptionMask | NSHandleUncaughtSystemExceptionMask | NSLogUncaughtRuntimeErrorMask | NSHandleUncaughtRuntimeErrorMask | NSLogTopLevelExceptionMask | NSHandleTopLevelExceptionMask);
[[NSExceptionHandler defaultExceptionHandler] setDelegate:[[MyExceptionHandler new] autorelease]];      
[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:mask];

详细信息可在指南异常编程主题中找到,“控制程序对异常的响应”部分