J'ai besoin d'utiliser un tableau de booléens dans objective-c. Je l'ai principalement installé, mais le compilateur envoie un avertissement à l'instruction 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 une primitive. Quoi qu'il en soit, je dois le faire et j'apprécierais grandement les conseils pour y parvenir.
Merci.
Oui, c'est exactement ce que c'est: les conteneurs NS * ne peuvent stocker que des objets objective-C, pas des types primitifs.
Vous devriez pouvoir accomplir ce que vous voulez en l'enveloppant dans un NSNumber:
[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
ou en utilisant @(YES)
qui enveloppe un BOOL
dans un NSNumber
[updated_users replaceObjectAtIndex:index withObject:@(YES)]]
Vous pouvez ensuite retirer la valeur boolValue:
BOOL mine = [[updated_users objectAtIndex:index] boolValue];
En supposant que votre tableau contient 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)];
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;
Comme Georg l'a dit, utilisez un tableau C.
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.
À partir de XCode 4.4, vous pouvez utiliser des littéraux Objective-C.
[updated_users replaceObjectAtIndex:index withObject:@YES];
Où @YES
est équivalent à [NSNumber numberWithBool:YES]
Si votre collection est volumineuse ou si vous souhaitez qu'elle soit plus rapide que les objets objc, essayez les types CFBitVector
/CFMutableBitVector
trouvés dans CoreFoundation. C'est l'un des types CF-Collections qui pas est livré avec un équivalent NS, mais il peut être rapidement inclus dans une classe objc, si vous le souhaitez).