2015-04-30 2 views
0

Я использую API поиска iTunes, чтобы вернуть число пользователей, которые просмотрели мою текущую версию приложения. Поскольку я еще не выпустил приложение, я должен обработать случай, когда API поиска iT ничего не возвращает.iOS 8: обработка данных, возвращаемых из iTunes Search API

Вот уместна код:

NSDictionary *iTunesDict = [NSJSONSerialization 
JSONObjectWithData:iTunesData options:0 error:&error]; 

NSArray *resultCount = @[[iTunesDict valueForKey:@"resultCount"]]; 
NSLog(@"%@", [resultCount objectAtIndex:0]); 


     if ([resultCount objectAtIndex:0] == 0) { 
      self.numberOfReviewers = @"0"; 

     } else { 

     NSArray *reviewers = @[[[iTunesDict valueForKey:@"results"] valueForKey:@"userRatingCountForCurrentVersion"]]; 

     if ([reviewers objectAtIndex:0] == nil) { 
     self.numberOfReviewers = @"0"; 

     } else { 
      NSString *howManyReviewed = [[[reviewers objectAtIndex:0] objectAtIndex:0] stringValue]; 
      self.numberOfReviewers = howManyReviewed; 
     } 

Мои проблемные центры вокруг первого if заявления. После осмотра, стоимость ...

[resultCount objectAtIndex:0] является: (__NSCFNumber *)(long)0

не удовлетворяет условию в моем первом if.

Что мне нужно сделать ** (__NSCFNumber *)(long)0 ** ==0??

ответ

2

Он возвращает данные как объект NSNumber. Используйте функцию compare: сравнения:

if ([resultCount[0] compare:@0] == NSOrderedSame) { 
    ... 
} 
else { 
    ... 
} 

Что это делает, сравнивая resultCount объект в NSNumber со значением 0 (вы можете использовать буквальный @0 для коротких рук NSNumber, как я сделал выше) , compare: возвращает одно из трех значений:

  • NSOrderedDescending
  • NSOrderedSame
  • NSOrderedAscending

Это читает слева направо. Поэтому, если бы мне пришлось использовать NSOrderedDescending, это было бы логически «: 0 меньше, чем resultCount» (в порядке убывания слева направо).

Для дальнейшего ознакомления ознакомьтесь с comparing NSNumber objects documentation.

В качестве альтернативы, потому что вы знаете, что это long, вы можете использовать метод longValue на NSNumber:

if ([resultCount longValue] == 0) { 
    .... 
} 
+1

Вам нужно заменить '' resultCount' с resultCount [0] '. 'resultCount' в' NSArray'. – rmaddy

+0

Итак, ссылаясь на способ возврата веб-службы данными путем каста (long), это в основном простая оболочка NSNumber на примитивном типе данных? –

+0

Да, это правильно. Вы можете размещать объекты только в NSDictionary, которые получены из NSObject (NSDictionary, UIImage, NSString и т. Д.). Простым способом переноса примитивного типа данных в NSNumber является его включение в @(), например. '@ (1,567)'. –

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