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

标签 iphone json ipad crash

我正在尝试使用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];
}

注意:screenshotUrls是一个数组,其中包含iPhone版本的图像
ipadScreenshotUrls是用于iPad照片的一个。

我在我的应用中使用了上面的代码,Apple接受了该代码,但是我收到崩溃报告,这些行显示出问题。

可能是因为我正在测试未找到的数组的数量?因为如果该应用仅以iphone为例,则iPad图像阵列将不存在。知道我该如何解决吗?

谢谢。

最佳答案

JSON是否包含某些键的值null

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

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

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

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

关于iphone - xcode检查是否存在NSArray并包含对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851435/

相关文章:

ios - 弄错时差

iphone - 如何设置ICarousel一张一张图片滑动一次

iphone - 多次按下时声音重叠

javascript - 使用 ES6 在 React 中映射对象内部的数组

java - 将 JSON 列表转换为 POJO

javascript - iPad 不播放音频

ios - iOS 7 中锁屏播放器的搜索栏问题

javascript - Backbone.js 中的嵌套模型

iphone - UIScrollview 中的格式化文本

ios - 横向和纵向旋转时iPad uitableview关闭位置