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よりもはるかに大きいです。エラーメッセージが表示されます...

私はそれらの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

しかし、もっと良いのは、それらをcintsに変換するだけです。[myNSNumberValue inValue]

于 2010-01-16T20:22:32.993 に答える