2010-08-11 18 views

Odpowiedz

28

Instancja o numerze NSNumber może pomóc. Na przykład:

NSNumber *yesNoOrNil; 

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

W celu określenia wartości:

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

na wszystkich platformach Mac OS X 10.3 i po wszystkie platformy iPhone OS, metoda -[NSNumber boolValue] gwarantuje powrót TAK lub NIE.

+0

Uzgodniono, że jest to najbliższy sposób robienia tego natywnie, ale nie cierpię robić tego w ten sposób. Prowadzi to do trudnych do zlokalizowania błędów, jeśli programista zapomni, że właściwość jest 'NSNumber *' i zakłada, że ​​jest to 'BOOL', w którym to przypadku testują na' if (yesNoOrNil) 'i daje niepoprawne wyniki bez żadnego ostrzeżenia . –

1

Myślę, że będziesz musiał użyć do tego jakiejś klasy, np. zawiń obiekt bool do obiektu NSNumber.

+0

+1 Z pewnością nie potrzebujesz * używania lekcji, ale jest to najlepszy sposób. – walkytalky

+0

Więc, jak ... jak to robisz? –

+0

@alexgray, jak w zaakceptowanej odpowiedzi – Vladimir

Powiązane problemy