Этот массив словарей является вашей моделью, поэтому он будет естественным местом.Сложная часть делает вашу модель изменчивой.Вы можете сделать свою модель изменчивой в классе, или прыгать через обручи, когда вы кэшируете изображение.Я бы порекомендовал первый, но закодировал его здесь, чтобы он соответствовал существующему коду ...
- (UIImage *)imageForIndexPath:(NSIndexPath *)indexPath {
NSDictionary *dic = [self.issues objectAtIndex:indexPath.row];
UIImage *image = [dic valueForKey:@"cached_image"];
if (!image) {
image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/issues/%@/cover.png", documentsDirectory, [dic objectForKey:@"Directory Name"]]];
NSMutableDictionary *updatedDictionary = [NSMutableDictionary dictionaryWithDictionary:dic];
[updatedDictionary setValue:image forKey:@"cached_image"];
NSMutableArray *updatedIssues = [NSMutableArray arrayWithArray:self.issues];
[updatedIssues replaceObjectAtIndex:indexPath.row withObject:[NSDictionary dictionaryWithDictionary:updatedDictionary]];
self.issues = [NSArray arrayWithArray:updatedIssues];
}
return image;
}
Это будет нестабильно при первой прокрутке списка, а затем сгладит после.Если вы не хотите, чтобы в первый раз выполнялись рубки и имели небольшую задержку, прежде чем появится представление, вы можете опередить модель и увеличить нагрузку:
for (int i=0; i<self.issues.count; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
(void)[self imageForIndexPath:indexPath];
}
Последнее, другое решениеявляется изменяемым массивом, соответствующим вашему массиву проблем.Это может быть просто прекрасно, но чаще всего я рад, что включил в свою модель некоторые кэшированные вычисления.Если вы обнаружите, что используете этот массив проблем в другом месте, вы будете рады, что у вас есть все изображения, о которых позаботились.