38 votes

Tableau booléen Objective C

Je dois utiliser un tableau de booléens dans objective-c. Je l'ai principalement mis en place, mais le compilateur lance un avertissement sur la déclaration suivante:

 [updated_users replaceObjectAtIndex:index withObject:YES];
 

C’est, j'en suis sûr, parce que OUI n’est tout simplement pas un objet; c'est un primitif. Quoi qu'il en soit, je dois le faire et j'apprécierais grandement les conseils sur la manière de le réaliser.

Merci.

72voto

Nick Partridge Points 1108

Oui, c'est exactement ce que c'est: les conteneurs NS * ne peuvent stocker que des objets Object-C, pas des types primitifs.

Vous devriez être capable d'accomplir ce que vous voulez en l'enveloppant dans un NSNumber:

[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

Vous pouvez alors extraire la valeur boolValue:

BOOL mine = [[updated_users objectAtIndex:index] boolValue];

14voto

Andrew Grant Points 35305

En supposant que votre tableau contienne des objets valides (et n'est pas un tableau de style c):

 #define kNSTrue         ((id) kCFBooleanTrue)
#define kNSFalse        ((id) kCFBooleanFalse)
#define NSBool(x)       ((x) ? kNSTrue : kNSFalse)

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
 

11voto

Georg Schölly Points 63123

Vous pouvez soit stocker NSNumbers :

 [updated_users replaceObjectAtIndex:index
                         withObject:[NSNumber numberWithBool:YES]];
 

ou utilisez un tableau C, selon vos besoins:

 BOOL array[100];
array[31] = YES;
 

8voto

Nicki Points 921

Comme Georg a dit, utilisez un C-array.

 BOOL myArray[10];

for (int i = 0; i < 10; i++){
  myArray[i] = NO;
}

if (myArray[2]){
   //do things;
}
 

Martijn, "myArray" est le nom que vous utilisez, "array" dans l'exemple de georg.

4voto

Marinov Iván Points 1003

À partir de XCode 4.4, vous pouvez utiliser les littéraux Objective-C.

[updated_users replaceObjectAtIndex:index withObject:@YES];

@YES est équivalent à [NSNumber numberWithBool:YES]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X