在我的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搜索都返回正确的值,即使在重复的单元格上也是如此。

最佳答案

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];

关于ios - 缓存以NSIndexPath作为键返回了错误的objectForKey,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14268552/

10-11 19:55