0

これは本当に基本的なことになると思いますが、理解できないようです。

2つのインデックスがNSMutableArrayあり、それぞれにNSMutableDictionaryいくつかの値があります。1つのインデックスで1つの値を変更したいのです[[anArray objectAtIndex:index] setValue:newValue forKey:someKey];が、これにより、すべてのインデックスでそのキーの値が変更されます。何が起こっているのかわかりません。

助けてくれてありがとう。

4

2 に答える 2

1

コードに問題はありません[[anArray objectAtIndex:index] setValue:newValue forKey:someKey];

NSMutableDictionaryこのように追加する必要があります

NSMutableArray *myArray = [[NSMutableArray alloc] init];

NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dict1value1", @"key1", @"dict1value2", @"key2", nil];


[myArray addObject:[dict1 copy]];

[myArray addObject:dict1];

[[myArray objectAtIndex:1] setValue:@"NEW VALUE" forKey:@"key2"];

NSLog(@"%@",[myArray objectAtIndex:0]);
NSLog(@"%@",[myArray objectAtIndex:1]);

また

   NSMutableArray *myArray = [[NSMutableArray alloc] init];

    NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dict1value1", @"key1", @"dict1value2", @"key2", nil];

    NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"dict2value1", @"key1", @"dict2value2", @"key2", nil];

    [myArray addObject:dict1];

    [myArray addObject:dict2];

    [[myArray objectAtIndex:1] setValue:@"NEW VALUE" forKey:@"key2"];

    NSLog(@"%@",[myArray objectAtIndex:0]);
    NSLog(@"%@",[myArray objectAtIndex:1]);

出力

{
    key1 = dict1value1;
    key2 = dict1value2;
}

{
    key1 = dict1value1;
    key2 = "NEW VALUE";
}
于 2013-03-15T22:28:14.313 に答える
0

dictを追加する前にCOPYしてください

同じ辞書へのN個のポインタを持つ配列があるため、N回追加しないでください

id d1 = @{.....}.mutableCopy;
id d2 = d1.mutableCopy;

NSArray *array = @[d1,d2];

次に、setValueForKeyなどを使用してキー/値を個別に編集します

于 2013-03-15T22:23:05.763 に答える