Objective C布尔数组

我需要在objective-c中使用一组布尔值。 我已经设置了它,但是编译器在下面的语句中引发一个警告:

[updated_users replaceObjectAtIndex:index withObject:YES]; 

这是,我敢肯定,因为是不是一个对象; 这是一个原始的。 无论如何,我需要做到这一点,并非常感谢如何实现它的build议。

谢谢。

是的,这正是它是什么:NS *容器只能存储客观的C对象,而不是原始types。

你应该能够完成你想要的东西,把它包装在一个NSNumber中:

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

或者通过使用包含BOOL @(YES)NSNumber

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

然后你可以把boolValue取出来:

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

假设你的数组包含有效的对象(而不是一个c风格的数组):

 #define kNSTrue ((id) kCFBooleanTrue) #define kNSFalse ((id) kCFBooleanFalse) #define NSBool(x) ((x) ? kNSTrue : kNSFalse) [updated_users replaceObjectAtIndex:index withObject:NSBool(YES)]; 

您可以存储NSNumbers

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

或根据您的需要使用Carrays:

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

像乔治说的那样,使用一个C数组。

 BOOL myArray[10]; for (int i = 0; i < 10; i++){ myArray[i] = NO; } if (myArray[2]){ //do things; } 

Martijn,“myArray”是你使用的名字,在georg的例子中是“array”。

从XCode 4.4开始,您可以使用Objective-C文字。

[updated_users replaceObjectAtIndex:index withObject:@YES];

其中@YES相当于[NSNumber numberWithBool:YES]

如果你的集合很大,或者你希望它比objc对象更快,那么尝试CoreFoundation中的CFBitVector / CFMutableBitVectortypes。 它是一个CF-Collectionstypes,它附带NS对象,但如果需要,它可以快速包装在objc类中。