40 Stimmen

Objective C Boolesches Array

Ich muss ein Array von Booleschen in Objective-C zu verwenden. Ich habe es meist eingerichtet, aber der Compiler wirft eine Warnung bei der folgenden Anweisung:

[updated_users replaceObjectAtIndex:index withObject:YES];

Ich bin mir sicher, dass dies daran liegt, dass JA einfach kein Objekt ist, sondern ein Primitivum. Unabhängig davon, ich muss dies tun, und würde sehr schätzen Ratschläge, wie es zu erreichen.

Danke.

73voto

Nick Partridge Punkte 1414

Ja, genau das ist es: Die NS*-Container können nur Objective-C-Objekte speichern, keine primitiven Typen.

Sie sollten in der Lage sein, das zu erreichen, was Sie wollen, indem Sie es in eine NSNumber einpacken:

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

oder durch die Verwendung von @(YES) die eine Umhüllung aus BOOL in einem NSNumber

[updated_users replaceObjectAtIndex:index withObject:@(YES)]]

Sie können dann den boolValue herausziehen:

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

14voto

Andrew Grant Punkte 57342

Angenommen, Ihr Array enthält gültige Objekte (und ist kein Array im C-Stil):

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

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

12voto

Georg Schölly Punkte 120083

Sie können entweder NSNumbers :

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

oder verwenden Sie ein C-Array, je nach Ihren Bedürfnissen:

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

8voto

Nicki Punkte 986

Wie Georg sagte, verwenden Sie ein C-Array.

BOOL myArray[10];

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

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

Martijn, "myArray" ist der Name, den Sie verwenden, "array" in Georgs Beispiel.

5voto

Ivan Marinov Punkte 2697

Ab XCode 4.4 können Sie Objective-C-Literale verwenden.

[updated_users replaceObjectAtIndex:index withObject:@YES];

Wo @YES ist gleichbedeutend mit [NSNumber numberWithBool:YES]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X