2014-04-11 62 views
-2

創建一個NSDictionary的關鍵我有一個dictionary,有時讀取一些JSON數據爲空值。當我這樣做:崩潰的訪問,應該是從JSON

NSDictionary *caption=[image objectForKey:@"caption"]; //crash here! 

凡外地caption是有,但空,(在JSON,caption:null),我得到一個崩潰。 我該如何消除這種情況?

我可以檢查空以後:

NSDictionary *caption=[image objectForKey:@"caption"]; 
NSString *[email protected]""; 
if(caption!=NULL ) 
{text=[caption objectForKey:@"text"]; } 

但危機來臨之前就這樣。

這是怎麼了我的字典里正在建:

NSError *error = nil; 
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
NSArray *myResults=[result objectForKey:@"data"]; 
long count=[myResults count]; 

for(NSDictionary *image in myResults) 
{ 
     NSDictionary *links=[image objectForKey:@"images"]; 
     NSDictionary *standard=[links objectForKey:@"standard"]; 
     NSString *url=[standard objectForKey:@"url"]; 

     NSLog(@"image:%@",image); 
     NSDictionary *caption=[image objectForKey:@"caption"]; //CRASH 
+1

你不能有一個NSDictionary實際零/零,除非該詞典已經在某種程度上破壞。你確定這起事故是來自那個具體的陳述嗎?發生了什麼異常? –

+2

發佈真正導致崩潰的代碼。還包括完整的錯誤消息。 – rmaddy

+1

請注意,你*可以*在NSDictionary中有一個NSNull對象,並且NSLog會像「(NULL)」那樣(我忘記了確切的消息)。一個NSNull對象不會是== null/nil,如果在下一個語句中被盲目地使用,將導致一個「無效的選擇器」異常。然而,一個NSNull對象*會*比較'[NSNull null]',所以你可以用它來檢查它。 –

回答

1

你肯定的NSDictionary *標題= [圖像objectForKey:@ 「標題」];會返回一本字典嗎?

反正方法來檢查,看它是否是JSON null是:

if ([image[@"caption"] isEqual:[NSNull null]]) { // it's null } 

注意,字典和數組不能包含零。零不是對象值。 [NSNull null]是一個特殊的對象,相當於nil,可以在nil不能的地方使用。

https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSNull_Class/Reference/Reference.html

+1

不需要使用'isEqual' - 因爲NSNull是一個單例類,您可以簡單地使用'=='。 –