从UITableView单元格中的URL加载异步图像 - 滚动时图像错误

时间:2014-03-11 14:07:18

标签: ios iphone objective-c ipad uitableview

我有一个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];           
        }
}` 

但问题是当我滚动表格视图时,错误的图像被分配到自定义单元格中的图像视图,任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

这很可能是由于细胞的重复使用。可能发生的事情是你触发了一个异步请求来下载图像,当你发生这种情况时,你滚动表格重新使用该单元格,这样当图像完成下载时,新单元格会获得图像而不是最初请求的图像。“ / p>

我认为您必须找到另一种方法来执行此操作或从prepareForReuse上的单元格中分离该请求

很多人推荐这个课程" SDWebImage"对于那种情况(虽然我还没有测试过)

答案 1 :(得分:0)

过去2年我一直在使用SDWebImage并使用了5个应用程序,非常简单,我想说这是在缓存中加载背景图像的最佳方式。

请试一试。你会喜欢的。 一个很好的教程是here