2011-08-29 52 views
3

iPhone客戶端應用程序崩潰,當它收到NULL作爲jsonData參數。使用第三方JSONKit庫,其中有下面的代碼行:iPhone崩潰與jsonData參數爲NULL

- (id)objectWithData:(NSData *)jsonData error:(NSError **)error 
{ 
    if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; } 
    return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]); 
} 

JSONKit文件說:

重要:objectWithUTF8String:和mutableObjectWithUTF8String:將提高NSInvalidArgumentException如果字符串爲NULL。

問題:我應該如何處理這種情況使得iPhone應用程序不能在這種情況下崩潰?不尋找理論上的異常處理代碼,但提示如何做一般的應用程序處理jsonData == NULL情況?

+1

通過確保數據不爲空???? –

+0

好的答案,除了我沒有訪問服務器:) – JOM

+0

但你不需要訪問服務器,以確定一個字符串是否爲空... –

回答

7

簡單。遵守圖書館規則,如下所示:

if (jsonData == nil) { 
    assert(0 && "there was an error upstream -- handle the error in your app specific way"); 
    return; // not safe to pass nil as json data -- bail 
} 

// now we are sure jsonData is safe to pass 

NSError * error = nil; 
id ret = [json objectWithData:jsonData error:&error]; 
... 
+0

同意。圖書館就是這樣,所以在它成爲問題之前處理這種情況。感謝名單! – JOM

0

很明顯,當沒有數據時,圖書館會提出異常(NSException)。如果你不熟悉異常處理的條款,我建議reading about it on wikipedia,然後在Apple's Doc,這是一個非常常見的編程主題。

至於問題的話,你需要例外

@try 
{ 
    // Do whatever you're doing with the JSON library here. 
} 
@catch (NSException *exception) 
{ 
    // Something happend 
    if ([exception.name isEqualToString:NSInvalidArgumentException]) 
    { 
     // This must be the jsonData == NULL. 
    } 
} 
@finally 
{ 
    // Optional, you can clear things here. 
} 
+0

好的答案,但在這種特殊情況下沒有幫助。猜猜我應該更清楚地表明它不是關於理論上的異常處理,而是如何處理這種真實情況:數據是NULL,不會崩潰,該怎麼辦。恐怕不熟悉JSON。 – JOM

+1

然後,在github上分叉JSONKit並提交你的補丁J – Jirapong