Подтвердить что ты не робот

Сравнение NSNumber с 0 не работает?

В моем приложении есть парсер JSON, и я загружаю значение в переменную detailDataSourceDict. Когда я пытаюсь получить valueForKey из массива и попытаюсь сравнить его с 0, он никогда не работает...

Здесь мой код:

if (indexPath.row == 1) {
    NSNumber *rating = [detailDataSourceDict valueForKey:@"rating"];
    NSLog(@"Rating:  %@",rating);
    if (rating == 0) {
        cell.detailTextLabel.text = @"This sheet has not yet been rated.";
    }
    else {
        cell.detailTextLabel.text = [NSString stringWithFormat:@"This sheet has a %@ star rating.",rating];
    }
    cell.textLabel.text = @"Rating";


}

Я вижу в своем канале JSON "рейтинг": "0", но когда рейтинг равен 0, он показывает "Этот лист имеет рейтинг 0 звезд". Вместо "Этот лист еще не был оценен".

Любые предложения? Спасибо.

4b9b3361

Ответ 1

NSNumber *rating - это объект. 0 является примитивным типом. Примитивные типы можно сравнить с ==. Объекты не могут; их нужно сравнивать для равенства с помощью isEqual:.

Таким образом, замените это:

rating == 0

с:

[rating isEqual:@0]

(@0является литералом NSNumber)

или, альтернативно:

rating.integerValue == 0

Причина, по которой ваш неправильный код даже компилируется, заключается в том, что 0 равен 0x0, который в свою очередь равен nil (вид, сохраняющий детали). Итак, ваш текущий код будет эквивалентен этому:

rating == nil

Ответ 2

rating является указателем на объект NSNumber, если вы сравниваете его с == 0, вы будете сравнивать только указатель.

Если вы хотите сравнить значение с 0, вам нужно получить фактическое значение, используя intValue, попробуйте;

if ([rating intValue] == 0) {

Ответ 4

Вы хотите изменить его:

if (rating == 0) {

Для

if ([rating intValue] == 0) {