0

好的,这是该死的事情:

- (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 > minimum) {} 条件。即使 newMinimumNumberOfSides 大于最小值,它也会进入 else 语句。

我做了:

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

这比 2 大得多。我收到我的错误消息...

我尝试 NSLog 这两个,它给了我正确的数字......那么这是怎么回事?

非常感谢!

4

2 回答 2

4

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

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

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

于 2010-01-16T20:21:28.033 回答
1

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

- (NSComparisonResult)compare:(NSNumber *)aNumber

但更好的是,只需将它们转换为 c 整数:[myNSNumberValue inValue]

于 2010-01-16T20:22:32.993 回答