iphone objective-c

iphone - Cómo convertir y comparar NSNumber a BOOL?



objective-c (3)

Primero, convierto el valor BOOL en NSNumber para ponerlo en NSUserDefaults. Más tarde me gustaría recuperar el valor BOOL de NSUserDefaults, pero obviamente obtengo NSNumber en lugar de BOOL. Mis preguntas son?

  1. cómo convertir de NSNumber a BOOL?
  2. Cómo comparar NSNumber con el valor BOOL.

Actualmente tengo:

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

¿Alguna mejor manera de comparar?

¡Gracias!


Actualmente compara dos punteros. Utilice en su lugar los métodos de NSNumber para comparar realmente los dos:

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

Para obtener el valor bool de un NSNumber use -(BOOL)boolValue :

BOOL b = [num boolValue];

Con eso, la comparación sería más fácil de leer para mí de esta manera:

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


La ÚNICA forma en que pude NSNumber la "booleanidad" de un NSNumber desde su NSConcreteValue (doh!) Fue con lo siguiente ...

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

Cualquier otro truco ... FALLÓ . Comprador tenga cuidado, esto no es infalible ( __NSCFNumber bien puede ser específico de la plataforma / máquina - es únicamente el detalle de implementación de Apple ) ... pero como dicen ... ¡ nada más funcionó!


NSUserDefaults tiene dos métodos para operar de forma transparente con booleanos:

- (BOOL)boolForKey:(NSString *)defaultName

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