我有一个IPhone应用程序,我在数组中异步加载图像,在cellforrowatindexpath中使用它,
` - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
sCell *cell = (sCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[sCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
NSMutableDictionary *dicttable=[sarray objectAtIndex:indexPath.section];
NSString *icon= [dicttable objectForKey:@"thumb_image"];
cell.image.image = [UIImage imageNamed:@"thumbnail-default.png"];
if(icon.length!=0)
{
if(![[ImageCache sharedImageCache] hasImageWithKey:icon])
{ cell.image.image = [UIImage imageNamed:@"thumbnail-default.png"];
NSArray *myArray = [NSArray arrayWithObjects:cell.image,icon,@"thumbnail-default.png",[NSNumber numberWithBool:NO],nil];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate performSelectorInBackground:@selector(updateImageViewInBackground:) withObject:myArray];
}
else
{
cell.image.image = [[ImageCache sharedImageCache] getImagefromCacheOrUrl:icon];
}
}`
并且一切正常,因为我启用了分页,我需要调用请求来加载下一组值,比如
`- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section==[sarray count]-1)
{
[self performSelectorInBackground:@selector(loadingfeedcntents:) withObject:count];
}
}`
但问题是当我滚动表格视图时,错误的图像被分配到自定义单元格中的图像视图,任何人都可以帮我这个吗?
答案 0 :(得分:0)
这很可能是由于细胞的重复使用。可能发生的事情是你触发了一个异步请求来下载图像,当你发生这种情况时,你滚动表格重新使用该单元格,这样当图像完成下载时,新单元格会获得图像而不是最初请求的图像。“ / p>
我认为您必须找到另一种方法来执行此操作或从prepareForReuse
上的单元格中分离该请求
很多人推荐这个课程" SDWebImage"对于那种情况(虽然我还没有测试过)
答案 1 :(得分:0)
过去2年我一直在使用SDWebImage并使用了5个应用程序,非常简单,我想说这是在缓存中加载背景图像的最佳方式。
请试一试。你会喜欢的。 一个很好的教程是here。