XCode проверить, если NSArray существует и содержит объекты? - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь получить некоторую информацию о приложении, используя 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];
}

Примечание.один для фотографий iPad.

Я использовал приведенный выше код в своем приложении, и Apple приняла его, но я получаю отчеты о сбоях, показывающие проблему в этих строках.

Может быть потому, что я тестирую счетчик массива, который не найден?потому что, если приложение является iphone только для примера, массив для изображений iPad не будет существовать.Любая идея, как я могу решить это?

Спасибо.

1 Ответ

2 голосов
/ 24 марта 2012

Содержит ли JSON значение null для некоторого ключа?

Если да, это значение преобразуется в NSNull в Obj-C, и любой метод, переданный этим объектам, приводит к сбою.(NSNull отличается от nil в этом отношении.)

Я обычно очень часто сталкиваюсь с сбоями с JSON в Obj-C.Перед использованием любого значения вы должны поставить проверку на место.

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

Обратите внимание, что приведение типов выполняется только во избежание предупреждения компилятора.

...