52 votes

Comment faire pour convertir et comparer NSNumber BOOL?

J'ai d'abord convertir la valeur BOOLÉENNE de NSNumber afin de le mettre en NSUserDefaults. Plus tard, je voudrais récupérer la valeur BOOLÉENNE de la NSUserDefaults, mais j'ai évidemment NSNumber au lieu de BOOL. Mes questions sont?

  1. comment convertir le retour de NSNumber BOOL?
  2. Comment comparer NSNumber à valeur BOOLÉENNE.

Actuellement, j'ai:

if (someNSNumberValue == [NSNumber numberWithBool:NO]) {
    do something
}

une meilleure façon de à la comparaison?

Merci!

143voto

Georg Fritzsche Points 59185

- Vous actuellement de comparer les deux pointeurs. Utiliser NSNumbers méthodes au lieu de comparer les deux:

if([someNSNumberValue isEqualToNumber:[NSNumber numberWithBool:NO]]) {
    // ...
}

Pour obtenir la valeur booléenne à partir d'un NSNumber utilisation -(BOOL)boolValue:

BOOL b = [num boolValue];

Avec qui la comparaison serait plus facile à lire pour moi de cette façon:

if([num boolValue] == NO) {
    // ...
}

1voto

Andy Points 1448

NSUserDefaults a deux méthodes pour fonctionner de façon transparente avec les booléens:

- (BOOL)boolForKey:(NSString *)defaultName

- (void)setBool:(BOOL)value forKey:(NSString *)defaultName

0voto

alex gray Points 5089

La SEULE façon que j'ai réussi à récupérer un NSNumbers '"booleanity" de son NSConcreteValue(doh!) a la suite...

id x = [self valueForKey:@"aBoolMaybe"];
if ([x respondsToSelector:@selector(boolValue)] && 
    [x isKindOfClass:objc_getClass("__NSCFNumber")])
    [self doSomethingThatExpectsABool:[x boolValue]];

Tous les autres truc... a ÉCHOUÉ. Acheteur méfiez-vous, ce n'est pas infaillible (__NSCFNumber peut-être bien de plate-forme/machine spécifique - c'est uniquement d'Apple détail de l'implémentation)... mais comme on dit.. rien d'autre n'a fonctionné!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X