Objective-C Условия операторов странность - PullRequest
0 голосов
/ 16 января 2010

Хорошо, вот проклятая вещь:

- (void)setMinimumNumberOfSides:(NSNumber *)newMinimumNumberOfSides {
    if (newMinimumNumberOfSides != minimumNumberOfSides) { 
        NSNumber *minimum = [[NSNumber alloc] initWithInt:(int)2];

        if (newMinimumNumberOfSides > minimum) {
            [newMinimumNumberOfSides retain];
            [minimumNumberOfSides release];
            minimumNumberOfSides = newMinimumNumberOfSides;
        } else {
            NSLog(@"setMinimumNumberOfSides: Invalid number of sides: %@ is smaller than the minimum of %@ allowed.",
            newMinimumNumberOfSides, minimum);
        }

        [minimum release];
        [newMinimumNumberOfSides release];
    }
}

Там происходит что-то странное! Проблема в моем условии if (newMinimumNumberOfSides> минимальный) {}. Даже если newMinimumNumberOfSides больше, чем минимум, он входит в оператор else.

Я сделал:

NSNumber *minimum = [[NSNumber alloc] initWithInt:(int)6];
[polygon setMinimumNumberOfSides:minimum];

что больше 2. И я получаю сообщение об ошибке ...

Я пытался NSLog эти два, и это дает мне правильные числа ... Так что же с этим происходит?

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 16 января 2010

Я думаю, вам нужно изменить выражение if на:

if ([newMinimumNumberOfSides intValue] > [minimum intValue])

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

1 голос
/ 16 января 2010

Вам нужно использовать следующий метод для сравнения объектов NSNumber:

- (NSComparisonResult)compare:(NSNumber *)aNumber

, но еще лучше просто конвертировать их в c: [myNSNumberValue inValue]

...