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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top