39

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

[updated_users replaceObjectAtIndex:index withObject:YES];

これは確かに、YES は単純にオブジェクトではないためです。それはプリミティブです。とにかく、私はこれを行う必要があり、それを達成する方法についてアドバイスをいただければ幸いです.

ありがとう。

4

6 に答える 6

73

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

NSNumberでラップすることにより、必要なことを達成できるはずです。

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

またはを使用@(YES)BOOLNSNumber

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

次に、boolValueを引き出すことができます。

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

于 2009-03-09T22:57:13.910 に答える
14

配列に有効なオブジェクトが含まれていると仮定します(cスタイルの配列ではありません)。

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

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
于 2009-03-09T22:56:23.490 に答える
12

あなたはどちらかを保存することができますNSNumbers

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

または、必要に応じてCアレイを使用します。

BOOL array[100];
array[31] = YES;
于 2009-03-09T22:56:06.580 に答える
8

Georg が言ったように、C アレイを使用します。

BOOL myArray[10];

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

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

Martijn、「myArray」はあなたが使用する名前で、georg の例では「array」です。

于 2010-12-08T15:08:47.727 に答える
1

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

于 2012-04-04T05:19:52.887 に答える