1

bool 値を持つ NSArray があります: NSArray* boolResults = [super foo:values]; セル 0 の値を変更するにはどうすればよいですか?

私は次のことを試しました: boolResults[0] = @NO; これにより、エラーが発生します: タイプ 'NSArray *' のオブジェクトに配列要素を書き込むメソッドが見つかりません

また、これ: BOOL* b = &[[array objectAtIndex:i] boolValue]; 次のエラーが発生しました: アドレス式は左辺値または関数指定子でなければなりません

この値を設定するために、この NSArray を NSMutableArray に変換したくありません。これを行う通常の方法はありますか?

ありがとう

4

2 に答える 2

4

配列が可変でない場合、その値は変更できません。解決策は次の 2 つです。

  1. 配列を変更可能にします。
  2. 配列に変更可能なオブジェクトを含めます。

可変配列を使用したくないので、2 番目の解決策の例を示します。標準フレームワークには変更可能な数値がないため、NSMutableData にラップします。この例では、値 @YES を持つ単一のオブジェクトを持つ配列があり、それを @NO に変更したいとします。

NSNumber* number= @YES;
NSMutableData* data=[[NSMutableData alloc]initWithData: [NSKeyedArchiver archivedDataWithRootObject: number]];
NSArray* array= @[data];   // Now you have an array with a single value
// You want to change the first value to @NO:  
number= @NO;
[array[0] setData: [NSKeyedArchiver archivedDataWithRootObject: number]];
于 2013-03-03T23:43:15.427 に答える
1

いいえNSArray。 s は不変です。変更された を使用して、ポインターを配列に再割り当てできますNSArray

NSArray *anArray = [super foo:values]
NSMutableArray *mutableCopy = [anArray mutableCopy];
// change your mutable copy and then reassign
anArray = [mutableCopy copy];

そして と同じようNSArrayNSNumbers も不変なので、 のようなもの[anArray[0] setBoolValue:NO]は存在しません。

于 2013-03-03T23:44:35.923 に答える