Кэш возвращает неправильный objectForKey с ключом NSIndexPath
В моем cellForRowAtIndexPath
метод, у меня есть этот код:
if ([self.cellImageCache objectForKey:indexPath]) {
UIImage *image = [self.cellImageCache objectForKey:indexPath];
[cell.entryView setImage:image];
return cell;
}
Entry *entry = [self.appDelegate.fetchedResultsController objectAtIndexPath:indexPath];
UIImage *image = [JTimelineCellContent imageForEntry:entry];
[cell.entryView setImage:image];
[self.cellImageCache setObject:image forKey:indexPath];
Когда я прокручиваю до конца таблицы, каждая ячейка отображается нормально. При прокрутке вверх клетки тоже отображаются нормально. Но когда я начинаю прокручивать вниз после прокрутки вверх, ячейки начинают появляться повторяющимися.
Каждый поиск NSLog, который я делаю для путей индекса, возвращает правильное значение, даже в повторяющихся ячейках.
1 ответ
NsIndexPath - это массив, а не строка. Так что ваш дизайн несовершенен.
Вы можете создать уникальную строку из indexPath, используя что-то вроде этого:
NSString *uniqueKey = [NSString stringWithFormat:@"key%@%@",indexPath.section,indexPath.row];
Таким образом, вы можете иметь:
NSString *uniqueKey = [NSString stringWithFormat:@"key%@%@",indexPath.section,indexPath.row];
if ([self.cellImageCache objectForKey:uniqueKey]) {
UIImage *image = [self.cellImageCache objectForKey:uniqueKey];
[cell.entryView setImage:image];
return cell;
}
Entry *entry = [self.appDelegate.fetchedResultsController objectAtIndexPath:indexPath];
UIImage *image = [JTimelineCellContent imageForEntry:entry];
[cell.entryView setImage:image];
[self.cellImageCache setObject:image forKey:uniqueKey];