2010-08-11 13 views

risposta

28

Un'istanza NSNumber può essere d'aiuto. Per esempio:

NSNumber *yesNoOrNil; 

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

al fine di determinare il suo valore:

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"); 
} 

Su tutte le piattaforme Mac OS X 10.3 e dopo tutte le piattaforme iPhone OS, il metodo -[NSNumber boolValue] è garantito per tornare SI o NO.

+0

Concordato che questo è il modo più vicino di farlo in modo nativo, ma io odio doverlo fare in questo modo. Porta a bug difficili da individuare se un dev dimentica che la proprietà è un 'NSNumber * 'e assume che sia un' BOOL', nel qual caso testano per 'if (yesNoOrNil)' e fornisce risultati errati senza alcun avviso . –

1

Penso che sarà necessario utilizzare una classe per questo, ad es. wrap bool su oggetto NSNumber.

+0

+1 Certamente * non * è necessario * per utilizzare una classe, ma è il modo migliore. – walkytalky

+0

Quindi, come ... come lo fai? –

+0

@alexgray, come nella risposta accettata – Vladimir

Problemi correlati