Подтвердить что ты не робот

Объективный C Булевский массив

Мне нужно использовать массив булевых в objective-c. У меня это в основном настроено, но компилятор выдает предупреждение в следующем выражении:

[updated_users replaceObjectAtIndex:index withObject:YES];

Это, я уверен, потому что ДА просто не объект; это примитив. Независимо от того, мне нужно сделать это, и будет очень благодарен за советы о том, как это сделать.

Спасибо.

4b9b3361

Ответ 1

Да, именно это: контейнеры NS * могут хранить только объекты objective-C, а не примитивные типы.

Вы можете выполнить то, что хотите, обернув его в NSNumber:

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

или используя @(YES), который обертывает BOOL в NSNumber

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

Затем вы можете вывести boolValue:

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

Ответ 2

Предполагая, что ваш массив содержит допустимые объекты (и не является массивом c-style):

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

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

Ответ 3

Вы можете либо сохранить NSNumbers:

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

или используйте C-массив, в зависимости от ваших потребностей:

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

Ответ 4

Как сказал Георг, используйте C-массив.

BOOL myArray[10];

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

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

Martijn, "myArray" - это имя, которое вы используете, "массив" в примере georg.

Ответ 5

Из XCode 4.4 вы можете использовать литералы Objective-C.

[updated_users replaceObjectAtIndex:index withObject:@YES];

Где @YES эквивалентно [NSNumber numberWithBool:YES]

Ответ 6

Если ваша коллекция большая или вы хотите, чтобы она была быстрее объектов objc, попробуйте типы CFBitVector/CFMutableBitVector, найденные в CoreFoundation. Это один из типов CF-Collections, который не поставляется с NS-копией NS, но при желании его можно быстро обернуть в класс objc.