Я написал код для фильтрации через словарь и изменения URL-адресов в их представлении UIImage. Вот мой код:Настройка переменных внутри циклов
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSDictionary *json = appDelegate.json;
for (id section in json) {
NSArray *key = [json objectForKey:section];
if ([key isKindOfClass:[NSArray class]]) {
for (NSMutableDictionary __strong *entry in key) {
entry = [entry mutableCopy];
for (id value in [entry allKeys]) {
if ([value isEqualToString:@"pic"]) {
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[entry objectForKey:value]]];
UIImage *image = [UIImage imageWithData:data];
[entry setObject:image forKey:value];
}
}
}
}
}
appDelegate.json = json;
Итерация является правильной, потому что, когда я останов моего кода, я вижу переменную UIImage для ПОС вместо строки. Тем не менее, я считаю, что если я продолжу выполнение, он вернется обратно, когда я выйду из цикла for.
Моя структура данных очень странная, поэтому я предоставил снимок экрана here.
Вы никогда не измените 'json'. Почему вы ожидаете увидеть разные результаты? – rmaddy
Я бы посоветовал не обновлять словарь с помощью представлений 'UIImage', если у вас есть что-то другое, кроме тривиального числа изображений, потому что изображения могут потребовать большой памяти. Лучше делать ленивую загрузку (т. Е. Только извлекать изображения по мере необходимости), или если вы абсолютно хотите их предварительно отфильтровать, сохраните их в своей папке «Документы» и, при необходимости, обновите свой изменяемый массив/словарь/модель, чтобы это отразить. И если вы настаиваете на предварительной загрузке изображений в память, убедитесь, что вы ответили 'didReceiveMemoryWarning', чтобы сохранить их в постоянном хранилище и освободить память. – Rob