2012-02-02 96 views
0

我有一個應用程序向服務器上的JSON發出請求以獲取一些數據。所有工作正常,直到 JSON字段的值具有null值。然後,應用程序崩潰。 所以我得到的數據,把它放在一個NSDictionary,然後訪問該字典中的所有值。我試着用這些if()聲明,但仍然,如果值爲null,應用程序崩潰。iOS JSON請求

  if([item valueForKey:@"title"]!=NULL) 
      [sbcvItem setTitle:[item valueForKey:@"title"]]; 
      if([item valueForKey:@"desc"]!=NULL) 
      [sbcvItem setDesc:[item valueForKey:@"desc"]]; 
      if([item valueForKey:@"url"]!=NULL) 
      [sbcvItem setUrl:[item valueForKey:@"url"]]; 

任何建議是值得歡迎的。

+0

哪個消息在崩潰時產生? – 2012-02-02 08:16:43

回答

1

NSDictionaryNSArray都不能將nil(或NULL)作爲值存儲。相反,我們使用佔位符對象。該佔位符對象是類NSNull的單例,並且您使用[NSNull null]得到指向它的指針。所以你需要像這樣測試:

if ([item objectForKey:@"title"] != [NSNull null]) 
    [sbcvItem setTitle:[item objectForKey:@"title"]]; 
2

您應該使用nil而不是NULL

我建議你通過在調試器中設置一個斷點來檢查item的值。也許item本身是nil

+1

發現它..它是''!= [NSNull null]'' – Teo 2012-02-02 08:20:27

0

答案取決於你從json解析器中得到的結果。通常您是否獲得了空對象的字符串值,例如「<空>」,在這種情況下,你是否應該是:萬一

if(![[item valueForKey:@"title"] isEqualToString:@"<null>"]) 
     [sbcvItem setTitle:[item valueForKey:@"title"]]; 
... 

你實際上得到零對象,那麼你可以嘗試:

if(![item valueForKey:@"title"]) 
     [sbcvItem setTitle:[item valueForKey:@"title"]]; 
... 

以確保你在字典裏面有什麼可以記錄它。