0

以下のような NSMutableArray データがあります。

(
        {
        Id = 3;
        Name = Fahim;
    },
        {
        Id = 2;
        Name = milad;
    },
        {
        Id = 1;
        Name = Test;
    }
)

ここで、名前を Test から Omar に更新します (id = 1 の場合)。

これを行う方法はありますか?

ここに画像の説明を入力


答え

以下の回答では、エラーが発生していまし-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instanceた。その問題を解決するために私はに変更[feeds addObject:[item copy]]しました[feeds addObject:item]

4

1 に答える 1

-1
for (NSMutableDictionary* aDict in yourMutableArray) {
    if (aDict[@"id"] == 1) {
        [aDict setObject:@"Omar" forKey:@"Name"];
    }
}

編集 :

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

NSDictionary* item1Dict = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"1",@"id",
                           @"Fahim",@"name"
                           , nil];

NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithDictionary:item1Dict];

[mutableArray addObject:item1];

NSDictionary* item2Dict = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"2",@"id",
                           @"milad",@"name"
                           , nil];

NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithDictionary:item2Dict];

[mutableArray addObject:item2];

NSDictionary* item3Dict = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"3",@"id",
                           @"test",@"name"
                           , nil];

NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithDictionary:item3Dict];

[mutableArray addObject:item3];

NSLog(@"%@",mutableArray);

for (NSMutableDictionary* aDict in mutableArray) {
    if ([aDict[@"id"] isEqualToString:@"3"]) {
        [aDict setObject:@"Omar" forKey:@"name"];
    }
}

NSLog(@"%@",mutableArray);

そして、はるかにエレガントな場合:

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

NSArray* name = [NSArray arrayWithObjects:@"Fahin",@"milad",@"test", nil];

for (int i = 0; i < name.count; i++) {
    NSDictionary* itemd = [NSDictionary dictionaryWithObjectsAndKeys:
                               [NSString stringWithFormat:@"%i",i],@"id",
                               name[i],@"name"
                               , nil];

    NSMutableDictionary* item = [NSMutableDictionary dictionaryWithDictionary:itemd];
    //or
    //NSMutableDictionary* item = [item mutableCopy];
    [mutableArray addObject:item];
}

NSLog(@"%@",mutableArray);

for (NSMutableDictionary* aDict in mutableArray) {
    if ([aDict[@"id"] isEqualToString:@"2"]) {
        [aDict setObject:@"Omar" forKey:@"name"];
    }
}

NSLog(@"%@",mutableArray);

ログは次のとおりです。

2013-10-18 00:51:48.845 test[34919:60b] (
        {
        id = 1;
        name = Fahim;
    },
        {
        id = 2;
        name = milad;
    },
        {
        id = 3;
        name = test;
    }
)

2 番目のログ:

2013-10-18 00:52:06.887 test[34919:60b] (
        {
        id = 1;
        name = Fahim;
    },
        {
        id = 2;
        name = milad;
    },
        {
        id = 3;
        name = Omar;
    }
)

コピー用のEDIT2:

-copy は、変更可能な Cocoa クラスによって実装されるため、常に対応する不変クラスを返します。NSMutableDictionary がコピーで送信されると、同じオブジェクトを含む NSDictionary が返されます。NSMutableDictionary は NSDictionary のサブクラスであり、コンパイラは文句を言いません。NSDictionary は、変更可能なサブクラスのメソッドを認識しません (内容を変更できないため)。

于 2013-10-17T22:13:20.120 に答える