1

私の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 検索は、繰り返しセルに対しても正しい値を返します。

4

1 に答える 1

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];
于 2013-01-10T23:15:45.090 に答える