在uitableviewcell中重复加载图像

时间:2014-12-18 09:30:15

标签: xcode uitableview tableview asyncimageview

我有一个tableview,每个单元格都有自己的imageview。我使用AsyncImageView将图像从互联网加载到imageview中。某些图像视图似乎将重复的图像加载到不同的单元格中:

enter image description here

在上面的屏幕截图中,如果图像B不应该加载两次,则会加载两次。当我向上和向下滚动时,这种情况经常发生。当发生这种情况时,我滚动并滚动回到单元格并加载正确的图像。后来当我再次向后滚动时,会出现同样的问题。我无法追查问题的来源。有人有主意吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   
{
    static NSString *simpleTableIdentifier = @"CustomCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:simpleTableIdentifier owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }else
    {
        [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:cell.logoImageView];
        cell.logoImageView.image = nil;
    }

    //Cause sections
    NSMutableArray *tempArray = [self.sectionArray objectAtIndex:indexPath.section];
    MyObject *myObject = [tempArray objectAtIndex:indexPath.row];

    NSString *thumbUrlString = [myObject valueForKey:@"thumbUrl"];

    if([thumbUrlString length]>0 )
    {
        NSString *imageUrl= [NSString stringWithFormat:@"http://www.sitename.com/%@",thumbUrlString];
        NSURL *url = [NSURL URLWithString:imageUrl];
        cell.logoImageView.imageURL=url;
    }else{
        cell.logoImageView.image = [UIImage imageNamed:@"placeholder.png"];
    }

    return cell;
}

2 个答案:

答案 0 :(得分:0)

我认为当您设置cell.logoImageView.imageURL时,您会在[AsyncImageLoader sharedLoader] loadImageAtURL:logoImageView.imageURL]代码或类似内容中调用类似CustomCell的内容。

您可能正在为所有图像使用相同的共享AsyncImageLoader,因此每次请求新图像时都会覆盖以前的图像请求,或者您为每个请求创建不同的线程,因为它们将结果返回到错误细胞

请发布AsyncImageLoader的一些代码。

答案 1 :(得分:0)

犯了一个愚蠢的错误:

 cell.logoImageView.image = nil 

将其更改为:

cell.logoImageView.imageURL = nil