質問

objective-cでブール値の配列を使用する必要があります。ほとんど設定しましたが、コンパイラは次のステートメントで警告をスローします。

[updated_users replaceObjectAtIndex:index withObject:YES];

これは、YESは単なるオブジェクトではないからです。それは原始的です。とにかく、私はこれを行う必要があり、それを達成する方法についてのアドバイスを大いに歓迎します。

ありがとう。

役に立ちましたか?

解決

はい、それはまさにそれです:NS *コンテナは、プリミティブ型ではなく、Objective-Cオブジェクトのみを保存できます。

NSNumberにラップすることで、目的を達成できるはずです:

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

または NSNumber

BOOL をラップする @(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の例。

XCode 4.4以降では、Objective-Cリテラルを使用できます。

[updated_users replaceObjectAtIndex:index withObject:@YES];

@YES [NSNumber numberWithBool:YES]と同等です

コレクションが大きい場合、またはobjcオブジェクトよりも高速にしたい場合は、CoreFoundationにある CFBitVector / CFMutableBitVector タイプを試してください。 NSは対応していない CF-Collections型の1つですが、必要に応じてobjcクラスにすばやくラップできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top