私はobjective-cでブールの配列を利用する必要があります。ほとんど設定されていますが、コンパイラは次のステートメントで警告をスローします。
[updated_users replaceObjectAtIndex:index withObject:YES];
YESは単にオブジェクトではないので、これは確かです。それはプリミティブです。とにかく、私はこれを行う必要があり、それを達成する方法についてのアドバイスをいただければ幸いです。
ありがとう。
はい、それはまさにそのとおりです。NS*コンテナは、プリミティブ型ではなく、目的Cのオブジェクトのみを格納できます。
あなたはそれをNSNumberでラップすることによってあなたが望むものを達成することができるはずです:
_[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
_
または、BOOL
をNSNumber
でラップする@(YES)
を使用する
[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]];
または、必要に応じてC配列を使用します。
BOOL array[100];
array[31] = YES;
Georgが言ったように、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
/CFMutableBitVector
タイプを試してください。 notがNS対応するものと一緒に出荷されるCF-Collectionsタイプの1つですが、必要に応じてobjcクラスにすばやくラップできます。