2010-08-11 9 views

Respuesta

28

Una instancia de NSNumber puede ayudar. Por ejemplo:

NSNumber *yesNoOrNil; 

yesNoOrNil = [NSNumber numberWithBool:YES]; // set to YES 
yesNoOrNil = [NSNumber numberWithBool:NO]; // set to NO 
yesNoOrNil = nil; // not set to YES or NO 

el fin de determinar su valor:

if (yesNoOrNil == nil) 
{ 
    NSLog (@"Value is missing!"); 
} 
else if ([yesNoOrNil boolValue] == YES) 
{ 
    NSLog (@"Value is YES"); 
} 
else if ([yesNoOrNil boolValue] == NO) 
{ 
    NSLog (@"Value is NO"); 
} 

En todas las plataformas Mac OS X 10.3 y después de todas las plataformas iPhone OS, el método -[NSNumber boolValue] está garantizado para volver SÍ o NO.

+0

Estoy de acuerdo en que esta es la manera más cercana de hacerlo de forma nativa, pero odio tener que hacerlo de esta manera. Lleva a errores difíciles de detectar si un desarrollador olvida que la propiedad es un 'NSNumber *' y asume que es un 'BOOL', en cuyo caso prueba' if (yesNoOrNil) 'y da resultados incorrectos sin ninguna advertencia . –

1

Creo que tendrá que usar alguna clase para eso, p. envolver bool al objeto NSNumber.

+0

+1 Definitivamente no * necesita * usar una clase, pero es la mejor manera. – walkytalky

+0

Entonces, como ... ¿cómo lo haces? –

+0

@alexgray, como en la respuesta aceptada – Vladimir

Cuestiones relacionadas