Pergunta

Eu preciso utilizar um array de booleanos em Objective-C. Eu tenho que principalmente configurar, mas o compilador gera um aviso no seguinte declaração:

[updated_users replaceObjectAtIndex:index withObject:YES];

Esta é, tenho certeza, porque SIM não é simplesmente um objeto; é um primitivo. Independentemente disso, eu preciso fazer isso, e gostaria muito de receber conselhos sobre como realizá-lo.

Graças.

Foi útil?

Solução

Sim, isso é exatamente o que é:. NS * recipientes só pode armazenar objective-C objetos, não tipos primitivos

Você deve ser capaz de realizar o que você quer por envolvê-lo em uma NSNumber:

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

ou usando @(YES) que envolve um BOOL num NSNumber

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

Você pode então retirar o boolValue:

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

Outras dicas

Assumindo que o seu matriz contém objetos válidos (e não é uma matriz C-estilo):

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

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

Você pode armazenar NSNumbers:

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

ou usar um C-matriz, dependendo de suas necessidades:

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

Como Georg dito, utilizar um array C.

BOOL myArray[10];

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

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

Martijn "myArray" é o nome que você usa, "array" de Georg exemplo.

De Xcode 4.4 você pode usar literais Objective-C.

[updated_users replaceObjectAtIndex:index withObject:@YES];

Onde @YES é equivalente a [NSNumber numberWithBool:YES]

Se sua coleção é grande ou você quer que ele seja mais rápido do que objetos ObjC, experimente os tipos CFBitVector / CFMutableBitVector encontrados em CoreFoundation. É um dos CF-coleções tipos que faz não navio com uma contrapartida NS, mas pode ser envolto em uma classe objc rapidamente, se desejar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top