我正在尝试为我的应用程序编写全局异常处理例程。其想法是它将临时将异常存储在内存中,并最终将其报告给服务器,而不是打扰用户。
我想收集尽可能多的信息,因此异常中的userInfo字段似乎是存储它的地方。然后,我可以简单地重新抛出异常,或者在以下情况下,将其直接报告给全局异常处理程序并继续。
@catch (NSException *e) {
NSLog(@"Got exception parsing XML stack %@", stack);
[e setValue:stack forKey:@"stack"];
[__zmsGlobals exception:e context:@"Parsing data"];
[self cleanupAfterScan];
[self report:[NSError errorWithDomain:@"zaomengshe.com" code:104 userInfo:e.userInfo] selector:failureSelector];
}
这只是关于如何在userInfo字段中设置值的猜测。 NSException似乎有一个setValue方法,但是它不起作用。它抛出“此类不适用于键栈的键值编码兼容”。
那么最好的方法是什么?我是否需要从头开始构建新的NSException?
最佳答案
是的,您需要创建新的NSException对象,复制/添加要在其中放置的零件,然后再次调用raise。
@catch (NSException* exception)
{
NSMutableDictionary* d = [[exception userInfo] mutableCopy];
[d setObject:@"new info" forKey:@"newKey"];
NSException * e = [NSException exceptionWithName:[exception name] reason:[exception reason] userInfo:d];
[e raise];
}
关于objective-c - NSException:如何添加userData并重新抛出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23242489/