Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSException:如何添加用户数据并重新播放?_Objective C_Cocoa_Nsexception - Fatal编程技术网

Objective c NSException:如何添加用户数据并重新播放?

Objective c NSException:如何添加用户数据并重新播放?,objective-c,cocoa,nsexception,Objective C,Cocoa,Nsexception,我正在尝试为我的应用程序编写一个全局异常处理例程。其想法是,它将临时将异常存储在内存中,并最终将其报告给服务器,而不是打扰用户 我希望收集尽可能多的信息,因此异常中的userInfo字段似乎是存储信息的地方。然后,我可以简单地重新显示异常,或者像下面的例子一样,直接将其报告给全局异常处理程序,然后继续 @catch (NSException *e) { NSLog(@"Got exception parsing XML stack %@", stack

我正在尝试为我的应用程序编写一个全局异常处理例程。其想法是,它将临时将异常存储在内存中,并最终将其报告给服务器,而不是打扰用户

我希望收集尽可能多的信息,因此异常中的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
,或者最好只传递一个
NSError
,封装原始的NSException,可以使用
userInfo

在您的情况下,不能在
NSException
上调用
setValue:
,仅仅因为它不能处理它。 将
n异常
视为只读`


更一般地说,异常不应用作消息,而应使用错误。

是的,您需要创建新的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];
}

很公平。比我所希望的要简单一点,但这不是PHP;-)我不知道mutableCopy,这有点帮助,谢谢。