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.
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 . –