iOS - SDWebImage加载错误的图像



我使用SDWebImage库缓存和延迟加载。但我发现有时它会显示另一个细胞的图像。

详细Scenerio

  • 有CollectionView有单元格包含UIImageView和标签。
  • ImageView包含用户的图像和标签与他们的
    名字。

但有时在Imageview中加载的图像有不同的图像

让说

Index  Name  Image
0      nameA  A
1      nameB  B
2      nameC  C
3      nameD  B

所以这里a在索引有命名所以图像应该是b "D"但它显示的是图像的名称b,即。"B"

这是我使用的代码

      if ([aMutDict objectForKey:@"picture_url"])
        {
            [[SDWebImageManager sharedManager]downloadWithURL:[NSURL URLWithString:[aMutDict objectForKey:@"picture_url"]] options:SDWebImageProgressiveDownload progress:Nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
                if(image){
                    [cell.imgProfilePic setImage:image];
                }else{
                    [cell.imgProfilePic setImage:ApplicationDelegate.gblImgPlaceholder];
                }
            }];
        }

您的方法的问题是,如果您滚动或当图像完全下载时,cell变量将保存任何其他单元格的地址,而不是您想要显示图像的实际单元格。这就是为什么图像显示为错误。

改成:

if ([aMutDict objectForKey:@"picture_url"])
{
    [cell.imgProfilePic setImageWithURL:[NSURL URLWithString:[aMutDict objectForKey:@"picture_url"]] 
                    placeholderImage:ApplicationDelegate.gblImgPlaceholder 
                    success:^(UIImage *image) {
                         NSLog("Image Loaded");
                     }
                     failure:^(NSError *error) {
                         NSLog("Image Not Loaded"); }
     ];
}

在实现了Midhun的答案后,我根据SDWebImage的新库找到了另一个方法。因为成功/失败块不在new UIImageView+WebCache.h

所以这对我有用。

    if ([aMutDict objectForKey:@"picture_url"])
    {
        [cell.imgProfilePic setImageWithURL:[NSURL URLWithString:[aMutDict objectForKey:@"picture_url"]] placeholderImage:ApplicationDelegate.gblImgPlaceholder options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
            if(error){
                //Image Not Loaded
            }
            if(image)
            { 
                // Image Loaded
            }
        }];
    }

最新更新