2010-01-16 5 views
0

Ok est ici la chose damnée:opérateurs Objective-C condtions bizarreries

- (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]; 
    } 
} 

Il y a quelque chose de bizarre se passe là-dedans! Le problème est mon if (newMinimumNumberOfSides> minimum) {} condition. Même si newMinimumNumberOfSides est plus grand que le minimum, il va dans l'instruction else.

J'ai fait:

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

ce qui est bien supérieur à 2. Et je reçois mon message d'erreur ...

J'ai essayé de NSLog ces deux, et il me donne les bons chiffres .. Alors, que se passe-t-il avec ça?

Merci beaucoup!

Répondre

4

Je pense que vous devez changer votre instruction if:

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

NSNumber est un objet, vous devez obtenir sa valeur entière avant de pouvoir commencer à l'utiliser dans les comparaisons.

+0

C'est logique très, merci beaucoup! – TomShreds

1

Vous devez utiliser la méthode suivante pour comparer des objets NSNumber:

- (NSComparisonResult)compare:(NSNumber *)aNumber 

mais mieux encore il suffit de les convertir en c ints: [myNSNumberValue inValue]