2010-09-22 13 views
12

Un NSArray peut-il contenir un tableau de valeurs bool?Valeurs NSArray et booléen

Le code suivant exécute

BOOL b = NO; 
NSMutableArray *array = [[NSMutableArray alloc] init]; 

[array addObject:[NSNumber numberWithBool:b]]; 

NSLog(@"value is %d", [array objectAtIndex:0]); 

Cependant, je ne reçois pas une valeur de 0 pour NO comme prévu. Au lieu de cela, ce que je reçois

valeur est 37736096

Répondre

39

Oui, juste envelopper les booléens dans NSNumber:

BOOL b = YES; 

[array addObject:[NSNumber numberWithBool:b]]; 

Si vous souhaitez récupérer les valeurs booléennes, utilisez ceci:

BOOL b = [[array objectAtIndex:i] boolValue]; 
// only if you know for sure it contains a boolean 
+0

Pouvez-vous expliquer pourquoi bool NO devient un grand nombre? Est-ce une valeur aléatoire? Merci. – chenyi1976

+2

C'est l'adresse de l'objet NSNumber, plutôt que son contenu. C'est parce que vous avez oublié d'appeler -boolValue –

4

Pour compléter la réponse de Philippe, vous devez utiliser la chaîne littérale int généré dans XCode 4.4 avec la sortie de Apple LLVM Compiler version 4.0.

Votre code ressemblera à ceci:

NSMutableArray *array = [[NSMutableArray alloc] init]; 

array[0] = @YES; 

//Value is 1 
NSLog(@"Value is %d:", [array[0] boolValue]); 
+0

... et quelle devrait être la sortie? –

+0

% d formatera la sortie en un nombre de sorte que vous verrez "Value is 1" – tiguero