Matrice booleana dell'obiettivo C.
-
06-07-2019 - |
Domanda
Devo utilizzare una matrice di valori booleani in obiettivo-c. L'ho principalmente impostato, ma il compilatore lancia un avvertimento alla seguente dichiarazione:
[updated_users replaceObjectAtIndex:index withObject:YES];
Questo è, ne sono certo, perché YES semplicemente non è un oggetto; è un primitivo. Indipendentemente da ciò, devo farlo e apprezzerei molto i consigli su come realizzarlo.
Grazie.
Soluzione
Sì, è esattamente così: i contenitori NS * possono contenere solo oggetti C-obiettivo, non tipi primitivi.
Dovresti essere in grado di ottenere ciò che desideri racchiudendolo in un NSNumber:
[updated_users replaceObjectAtIndex: index withObject: [NSNumber numberWithBool: YES]]
o usando @ (YES)
che avvolge un BOOL
in un NSNumber
[updated_users replaceObjectAtIndex: index withObject: @ (YES)]]
È quindi possibile estrarre boolValue:
BOOL mine = [[updated_users objectAtIndex: index] boolValue];
Altri suggerimenti
Supponendo che l'array contenga oggetti validi (e non sia un array in stile c):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
Puoi archiviare NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
o usa un array C, a seconda delle tue esigenze:
BOOL array[100];
array[31] = YES;
Come ha detto Georg, usa un array C.
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
Martijn, " myArray " è il nome che usi, " array " nell'esempio di georg.
Da XCode 4.4 è possibile utilizzare valori letterali Objective-C.
[updated_users replaceObjectAtIndex: index withObject: @YES];
Dove @YES
è equivalente a [NSNumber numberWithBool: YES]
Se la tua raccolta è grande o vuoi che sia più veloce degli oggetti objc, prova i tipi CFBitVector
/ CFMutableBitVector
presenti in CoreFoundation. È uno dei tipi di CF-Collections che non viene spedito con una controparte NS, ma può essere racchiuso rapidamente in una classe objc, se lo si desidera.