2012-03-24 104 views
0

我試圖獲得一些使用Apple API的應用程序信息,它給了我一個包含許多對象的JSON文件。xcode檢查一個NSArray是否存在幷包含對象?

我試圖確定該應用(僅通用/ iPhone只/ ipad公司)這樣

if(([[appDetails objectForKey:@"screenshotUrls"] count]>0) && ([[appDetails objectForKey:@"ipadScreenshotUrls"] count]>0)) 
{ 
    cell.appDeviceLabel.text = @"Universal"; 
    cell.appDeviceLabel.backgroundColor = [UIColor colorWithRed:0.012 green:0.467 blue:0.784 alpha:1]; 
} 

else if(([[appDetails objectForKey:@"screenshotUrls"] count]==0) && ([[appDetails objectForKey:@"ipadScreenshotUrls"] count]>0)) 
{ 
    cell.appDeviceLabel.text = @"iPad"; 
    cell.appDeviceLabel.backgroundColor = [UIColor colorWithRed:0.941 green:0.58 blue:0.016 alpha:1];   
}   
else if(([[appDetails objectForKey:@"screenshotUrls"] count]>0) && ([[appDetails objectForKey:@"ipadScreenshotUrls"] count]==0)) 
{ 
    cell.appDeviceLabel.text = @"iPhone"; 
    cell.appDeviceLabel.backgroundColor = [UIColor colorWithRed:0.016 green:0.459 blue:0.129 alpha:1]; 
} 

注意的類型:screenshotUrls是包含圖像爲iphone版本 ipadScreenshotUrls陣列是一個用於iPad照片。

我在我的應用程序中使用了上面的代碼,Apple接受它,但是我收到的崩潰報告顯示這些行有問題。

可能是因爲我正在測試未找到的數組的計數?因爲如果該應用程序僅用於iPhone,則iPad圖像陣列將不存在。任何想法如何解決這個問題?

謝謝。

回答

2

對於某些密鑰,JSON是否包含值null

如果是,則此值在Obj-C中轉換爲NSNull,並且傳遞給此對象的任何方法都會導致崩潰。 (NSNull在這方面與nil不同。)

我經常在Obj-C中因爲這個原因而頻繁遇到JSON崩潰。在使用任何值之前,您應該先進行檢查。

if (value == (typecast)[NSNull null]) { 
    // use the value 
} 

請注意,類型轉換僅用於避免編譯器警告。

+0

是的,就像我說的例子,如果應用程序是「僅iPhone」,NSArray的Ipad圖像將不存在。所以我認爲這是不是?所以如果我明白我應該這樣測試:if([appDetails objectForKey:@「screenshotUrls」]!=(typecast)[NSNull null]){ //該數組存在 } – hafedh 2012-03-24 12:31:00

+0

是的,這是正確的。但是當JSON包含'null'作爲一些值時會發生這種錯誤。如果該鍵不存在,'NSDictionary'將返回'nil'並且不會導致崩潰。你應該首先確認這是原因。儘管在處理JSON時,放置'NSNull'檢查通常是一種很好的做法。 – Sailesh 2012-03-24 13:09:26

+0

對於我上面列出的代碼,謝謝你的任何方式,只是一件事,是否有可能導致崩潰的錯誤?即使NSArray不存在,我可以寫array.count?謝謝。 – hafedh 2012-03-24 13:21:33

相關問題