#ios #objective-c
#iOS #objective-c
Вопрос:
Я могу извлечь нужные мне данные из API, но тогда я не могу изменить значения NSMutableArray. Вот данные, которые я получаю из API:
{
favorites = (
{
id = 766;
imageUrl = "766.jpg";
name = "Ground Beef 93% Lean 1LB PKG";
price = "5.99";
qty = 5;
sale = "<null>";
switch = 1;
},
{
id = 3270;
imageUrl = "3270.jpg";
name = "Arnold Premium Italian Bread 20oz PKG";
price = "5.39";
qty = 5;
sale = "<null>";
switch = 1;
},...
);
success = true;
}
Я объявляю свойство favorites в части интерфейса :
@property (nonatomic, retain) NSMutableArray *favorites;
Я храню данные в NSMutableArray следующим образом :
NSError *myError = nil;
NSMutableArray *response = [[NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:amp;myError] mutableCopy];
Затем я сохраняю любимые продукты в другом объекте NSMutableArray :
NSString *success = [response valueForKey:@"success"];
if([success isEqualToString:@"true"]) {
self.favorites = [response valueForKey:@"favorites"];
}
С помощью этих данных я могу отобразить все изображения, цены и т.д. в таблице.
Проблема в том, что я хочу обновить значения в изменяемом массиве self.favorites:
[self.favorites[indexPath.row] setObject:@"0" forKey:@"switch"];
Я получаю эту ошибку: -[__NSCFDictionary setObject:forKey:]: изменяющий метод, отправленный в неизменяемый объект.
Я даже пытался добавить изменяемую копию при назначении массива избранному :
self.favorites = [[response valueForKey:@"favorites"] mutableCopy];
но это тоже не сработало.
Комментарии:
1. Ваш массив изменчив, но содержащиеся в нем словари остаются неизменяемыми.
2. Как сказал @rmaddy. Мне нужны NSJSONReadingMutableContainers, это то, что делает словари изменяемыми.
Ответ №1:
Вы хотите NSJSONReadingMutableContainers
, а не NSJSONReadingMutableLeaves
.
Использование NSJSONReadingMutableLeaves
дает вам изменяемые строки и другие изменяемые объекты внутри контейнеров. Не то, что вам здесь нужно.