2015-05-19 48 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對象。我不能說,這對你是否有問題。