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

Iphone xcode检查NSArray是否存在并包含对象?,iphone,json,ipad,crash,Iphone,Json,Ipad,Crash,我正在尝试使用Apple API获取一些应用程序信息,它给了我一个包含许多对象的JSON文件 我试着像这样确定应用程序的类型(通用/仅限iPhone/仅限iPad) if(([[appDetails objectForKey:@"screenshotUrls"] count]>0) && ([[appDetails objectForKey:@"ipadScreenshotUrls"] count]>0)) { cell.appDeviceLabel.text

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

我试着像这样确定应用程序的类型(通用/仅限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];
}
注意:ScreenShotURL是一个数组,包含iphone版本的图像 iPadScreenshotURL是用于iPad照片的URL

我在我的应用程序中使用了上面的代码,苹果也接受了,但我收到的崩溃报告显示这些代码行中存在问题

可能是因为我正在测试未找到的数组的计数?因为如果应用程序仅以iphone为例,那么iPad图像阵列将不存在。你知道我该怎么解决这个问题吗


谢谢。

JSON是否包含某个键的值
null

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

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

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

请注意,进行类型转换只是为了避免编译器警告。

是的,如我所说,例如,如果应用程序是“仅限iPhone”,则Ipad图像的NSArray将不存在。所以我认为这是重点不?因此,如果我理解,我应该这样测试:如果([appDetails objectForKey:@“screenshotUrls”]!=(typecast)[NSNull null]){//数组存在}是的,这是正确的。但是当JSON包含
null
作为某个值时,就会发生这种错误。如果密钥不存在,则
NSDictionary
将只返回
nil
,并且不会导致崩溃。你应该首先确认这是原因。尽管在处理JSON时,通常使用
NSNull
检查是一种很好的做法。谢谢你,对于上面列出的代码,有一件事是不是有什么错误会导致崩溃?即使NSArray不存在,我也可以写入array.count吗?谢谢。如果数组不存在,您可以写入array.count。但您必须确保它是一个数组。例如,您的代码应该如下所示:
id对象=[appDetails objectForKey:@“screenshotUrls]”;如果([object isMemberOfClass:[NSArray class]]){//do stuff the object as array}
这些检查很小但很有用,可以使代码更加健壮。