xcode检查NSArray是否存在并包含对象?

时间:2012-03-24 11:41:10

标签: iphone json ipad crash

我正在尝试使用Apple API获取一些应用信息,这给了我一个包含许多对象的JSON文件。

我试图确定应用的类型(仅适用于Universal / 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图像的数组将不存在。知道怎么解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:2)

JSON是否包含某些键的值null

如果是,则在Obj-C中将此值转换为NSNull,并且传递给此对象的任何方法都会导致崩溃。 (NSNull在这方面与nil不同。)

由于这个原因,我经常在Obj-C中遇到与JSON的崩溃。在使用任何值之前,您应该检查一下。

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

请注意,类型转换仅用于避免编译器警告。