Кэш возвращает неправильный 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];
Другие вопросы по тегам