长时间潜伏,第一次海报。
我正在编写一个可可应用程序,它大量使用NSOperationQueues来管理后台任务。这个应用程序是一个更旧的应用程序的重写,使用手动管理的NSThreads来完成类似的事情。
其中一个要求是我们捕获/记录所有未捕获的异常以避免应用程序终止。在旧版本的应用程序中,我们将使用NSExceptionHandler API安装所有线程的异常陷阱。既然我们从线程中删除了一个抽象级别,我就无法访问该线程对象(实际上,我的印象是队列使用的线程可能会因操作调用而改变)。
当后台操作失败时,保持我的应用程序崩溃的建议/最佳方法是什么?
如果重要,部署在Mac OS X 10.6上。
答案 0 :(得分:1)
我使用以下内容为自己解决了这个问题:
NSInteger mask = (NSLogUncaughtExceptionMask| NSHandleUncaughtExceptionMask | NSLogUncaughtSystemExceptionMask | NSHandleUncaughtSystemExceptionMask | NSLogUncaughtRuntimeErrorMask | NSHandleUncaughtRuntimeErrorMask | NSLogTopLevelExceptionMask | NSHandleTopLevelExceptionMask);
[[NSExceptionHandler defaultExceptionHandler] setDelegate:[[MyExceptionHandler new] autorelease]];
[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:mask];
详细信息可在指南异常编程主题中找到,“控制程序对异常的响应”部分