2015-05-19 37 views
0

我正在研究一些API(Crittercism)来报告客户端到服务器的处理异常。Objective-C:将NSString附加到NSException原因

客户端API以NSException作为输入参数。在调用API之前,我还需要向NSException添加一些应用程序上下文信息字符串(NSString)。

我如何使用Objective-C来做到这一点。我不得不将appContextString附加到异常。

+0

你能展示你试过的东西以及你目前收到的任何错误吗? –

回答

1

你可以从旧的属性创建一个新的NSException对象,但这似乎很杂乱。由于您只是记录处理的异常,因此我会在此之前记录“应用上下文”:

@try { 
    a = [test characterAtIndex:index]; 
} 
@catch (NSException *exception) { 
    NSString *appContext = @"..."; 
    [Crittercism leaveBreadcrumb:appContext]; 
    [Crittercism logHandledException:exception]; 
} 
+0

我宁愿从旧的属性构建一个新的NSException对象。 –

+0

@SinuVarghese那么,你为什么不做呢? –

+0

@AminNegm-Awad,我在Objective-C中只有较少的知识,所以我不知道该怎么做。 –

1

您必须将其复制。这可以很容易地完成。的NSExeption实例有三个重要的属性:

  • 原因
  • 用户信息

在复制它,你可以将字符串添加到用户信息词典:

NSMutableDictionary *userInfo = [exception.userInfo mutableCopy]; 
userInfo[@"YourPrivateKey"] = contextString; 
NSException *extendedException = [NSException exceptionWithName:exception.name reason:exception.reason userInfo:userInfo]; 

我认为你会失去调用堆栈的警告。您可以阅读并将其放入用户信息字典中。我在Objective-Cloud上做了类似的方法。

userInfo[@"CallStackSymbols2] = exception.callStackSymbols; 

与调用堆栈返回地址类似。

我不认为这是非常好的,因为调用堆栈成为异常用户信息的一部分,而不是异常本身。对我来说,这并不是一个警告,因为我将异常作为JSON发送,因此将调用堆栈作为JSON对象。我不能说,这对你是否有问题。