Почему не работает этот простой оператор «если» (внутри быстрого перечисления)? - PullRequest
1 голос
/ 14 апреля 2011

Я перечисляю сущности ChecklistItem в моей таблице, чтобы увидеть, какие из них имеют priority (атрибут NSNumber), равный 1. checklistItems находятся во многих отношениях с Checklist.

В этом простом коде первый NSLog работает нормально и сообщает, что некоторые из моих ChecklistItems имеют приоритет 1. Но второй NSLog никогда не вызывается.Почему это?Я предполагаю, что неправильно формулирую утверждение «если», но не знаю, как.

for (ChecklistItem *eachItem in checklist.checklistItems){
    NSLog(@"Going through loop. Item %@ has priority %@.", eachItem.name, eachItem.priority);

    if (eachItem.priority == [NSNumber numberWithInt:1]) {
        NSLog(@"Item %@ has priority 1", eachItem.name);
        }
}

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

Вы сравниваете указатели возвращаемых значений eachItem.priority и [NSNumber numberWithInt:1]. Вы должны использовать NSNumber метод равенства.

2 голосов
/ 14 апреля 2011

Вы не можете сравнивать объекты, как вы делали выше.Используйте следующий код.

for (ChecklistItem *eachItem in checklist.checklistItems){
    NSLog(@"Going through loop. Item %@ has priority %@.", eachItem.name, eachItem.priority);

    if ([eachItem.priority intValue]== 1) {
        NSLog(@"Item %@ has priority 1", eachItem.name);
        }
}

Спасибо,

1 голос
/ 14 апреля 2011

Ну, вы должны проверять равенство значений примерно так:

if ( [eachItem.priority intValue] == 1 ) { ... }

Однако я немного удивлен, что он не случайно работает как есть, потому что я думал, что NSNumber объединил несколько базовых экземпляров, и я ожидал, что 1 будет одним из них. Однако полагаться на это было бы очень плохо, даже если в этом случае это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...