2012-03-24 2 views
0

Я пытаюсь получить информацию о приложении с помощью API Apple, который дает мне 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 для некоторого ключа?

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

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

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

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

+0

Да, как я сказал, например, если приложение «только для iPhone», изображения NSArray для Ipad не будут существовать. Итак, я думаю, что это точка нет? Поэтому, если я понимаю, что я должен протестировать следующим образом: if ([appDetails objectForKey: @ "screenshotUrls"]! = (Typecast) [NSNull null]) { // массив существует } – hafedh

+0

Да, это правильно. Но такая ошибка возникает, когда JSON содержит «null» в качестве некоторого значения. Если ключ не существует, 'NSDictionary' просто вернет' nil' и это не вызовет сбоя. Вы должны сначала подтвердить, что это причина. Хотя проверка «NSNull» является хорошей практикой в ​​целом при работе с JSON. – Sailesh

+0

Откажитесь от вас в любом случае, только для моего кода, указанного выше, есть ли что-то неправильное, что может привести к сбою? даже если NSArray не существует, я могу написать array.count? Благодарю. – hafedh

Смежные вопросы