Objective-C Condtions操作员的怪异

时间:2010-01-16 20:17:07

标签: objective-c operators conditional-statements

好的,这是该死的东西:

- (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 个答案:

答案 0 :(得分:4)

我认为您需要将if语句更改为:

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

NSNumber是一个对象,因此您必须先获取其整数值,然后才能在比较中开始使用它。

答案 1 :(得分:1)

您需要使用以下方法来比较NSNumber对象:

- (NSComparisonResult)compare:(NSNumber *)aNumber

但更好的是将它们转换为c ints:[myNSNumberValue inValue]