2013-01-10 151 views
1

在我cellForRowAtIndexPath方法,我有這樣的代碼:緩存返回錯誤objectForKey與NSIndexPath關鍵

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

當我滾動到的tableview的底部,每個單元格顯示細膩。滾動備份時,單元格也顯示得很好。但是當我滾動後開始向下滾動時,細胞開始出現重複。

即使對重複的單元格,我爲索引路徑所做的每個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]; 
+0

我真的試圖正是這樣,只能用英文逗號分隔每個因爲它會導致其他問題(例如單元格1,11和單元格11,1)。它仍然產生了相同的結果。 – Andrew

+0

是否爲每個單元調用了cellForRowAtIndexapath?它是否在緩存中找到圖像?做一些日誌,讓我知道。 – Lefteris

+0

我也假設你正在初始化你的cellImageCache字典。對? – Lefteris