Frage

Ich brauche eine Reihe von booleans in Objective-c zu nutzen. Ich habe es meistens bekam eingerichtet, aber der Compiler wirft eine Warnung an die folgende Anweisung:

[updated_users replaceObjectAtIndex:index withObject:YES];

Das ist, ich bin sicher, weil ja nicht einfach ein Objekt ist; es ist ein primitiver. Egal, ich brauche, dies zu tun, und stark Beratung schätzen würde, wie man es erreichen.

Danke.

War es hilfreich?

Lösung

Ja, das ist genau das, was es ist. Die NS * Behälter nur Objective-C-Objekte speichern können, nicht primitive Typen

Sie sollten fähig sein, zu erreichen, was Sie wollen, indem Sie sich in einem NSNumber Verpackung:

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

oder durch Verwendung @(YES), die eine BOOL in einem NSNumber hüllt

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

Sie können dann die boolValue herausziehen:

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

Andere Tipps

Unter der Annahme, Ihr Array enthält gültige Objekte (und ist kein c-style-Array):

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

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

Sie können entweder speichern NSNumbers:

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

oder verwenden Sie einen C-Array, je nach Bedarf:

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

wie Georg gesagt, verwendet, um einen 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 "Array" in Georgs Beispiel.

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

[updated_users replaceObjectAtIndex:index withObject:@YES];

Wo @YES entspricht der [NSNumber numberWithBool:YES]

Wenn Sie Ihre Sammlung groß ist oder Sie wollen es schneller als objc Objekte, versuchen Sie die CFBitVector / CFMutableBitVector Typen in Corefoundation gefunden. Es ist eine des CF-Collections-Typs, die tut nicht Schiff mit einem NS Gegenstück, aber es kann schnell in einer objc Klasse gewickelt werden, falls gewünscht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top