Заменить значение в NSDictionary в iPhone - PullRequest
28 голосов
/ 21 декабря 2010

У меня есть массив (dataArray) NSDictionary "item". Имеются данные типа «Дэвид» для ключа «имя» и «85» для ключа «отметки» и т. Д. Для 5 студентов. Я хочу заменить знак Давида на 90 по отношению к значению индекса массива (то есть 0 для словаря, содержащего Давида и 85). Как я могу это сделать?

Код для содержимого в массиве:

[item setobject:name forkey:@"Name"];
[item setobject:mark forkey:@"Marks"];
[dataArray addOject:item]

Приведенный выше код идет внутри парсинга, поэтому у меня есть массив с 5 объектами (учащимися), их именами и отметками, теперь я хочу заменить отметку первого объекта в массиве данных.

Ответы [ 5 ]

72 голосов
/ 21 декабря 2010

Вот что вы можете сделать:

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init];
NSDictionary *oldDict = (NSDictionary *)[dataArray objectAtIndex:0];
[newDict addEntriesFromDictionary:oldDict];
[newDict setObject:@"Don" forKey:@"Name"];
[dataArray replaceObjectAtIndex:0 withObject:newDict];
[newDict release];

Надеюсь, это поможет!

28 голосов
/ 21 декабря 2010

Сначала вам нужен NSMutableDictionary, с его помощью вы можете изменить ключ и значение.

Это будет выглядеть так:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"david", @"name", "85", @"marks", nil];

[dict setObject:@"90" forKey:@"david"];
10 голосов
/ 01 апреля 2015
 // NSDictionary *dict = ...
    NSMutableDictionary *mutableDict = [dict mutableCopy];
    [mutableDict setObject:@"myObject" forKey:@"myKey"];
    dict = [mutableDict mutableCopy];

Надеюсь, это поможет

10 голосов
/ 18 августа 2012

Если вы хотите обновить объект в NSDictionary, вы должны использовать NSMutableDictionary . NSMutableDictionary имеет следующие дополнительные методы

Добавление записей

  • SetObject: forKey:
  • SetValue: forKey:
  • addEntriesFromDictionary:
  • setDictionary:

Удаление записей

  • removeObjectForKey:
  • removeAllObjects
  • removeObjectsForKeys:
1 голос
/ 21 декабря 2010
[davidsRecord setObject:@"100" forkey:@"mark"];
...