Редактирование NSMutableDictionary в массиве - PullRequest
0 голосов
/ 26 апреля 2011

У меня вопрос: у меня есть NSMutableArray, который я передаю в нескольких представлениях.В одном из представлений значение объекта в этом массиве (NSMutableDictionary) может быть отредактировано.Я делаю это, используя код:

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:selectedItem copyItems:YES];
NSMutableString *newLoc = [[NSMutableString alloc] initWithString:locationField.text]; 
[tester setValue:newLoc forKey:@"Location"];
[selectedList replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester];

Проблема, с которой я столкнулся, заключается в замене этого объекта в selectedList.Выдает ошибку *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0xa631e30'. Это работает, если я копирую новый элемент в массив-копию selectedList и снова выделяю selectedList с новым значением, но у других представлений возникают проблемы с нахождением этого же списка снова в массиве (новое выделениеместо нахождения).

TL; версия DR: как я могу отредактировать значение (путем замены?) Внутри NSMutableArray?Почему не работает replaceObjectAtIndex?

РЕДАКТИРОВАТЬ: Это было действительно неизменным.Тем не менее, главный вопрос остается: у меня есть:

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:geselecteerdItem copyItems:YES];
[geselecteerdItem setValue:nieuweLoc forKey:@"Location"];
[geselecteerdeLijst replaceObjectAtIndex:[geselecteerdeLijst indexOfObject:tester] withObject:geselecteerdItem];

Когда я использую: [warningList replaceObjectAtIndex:[warningList indexOfObject:geselecteerdeLijst] withObject:keuzeLijst], это дает мне ошибку outofbounds, потому что индекс массива geselecteerdeLijst явно изменился внутри warningList.Есть идеи?

1 Ответ

6 голосов
/ 26 апреля 2011

selectedList - это массив неизменный , который не поддерживает никаких изменений.Вы можете сделать что-то вроде этого, хотя:

NSMutableArray *tmp = [NSMutableArray arrayWithArray: selectedList];
[tmp replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester];

РЕДАКТИРОВАТЬ: Чтобы уточнить, __NSArrayI является конкретным неизменяемым подклассом NSArray, __NSArrayM является изменяемым.Вы не должны полагаться на имена частных классов, но поскольку они говорят сами за себя, вы можете, по крайней мере, знать, что является изменчивым, а что нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...