我使用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
}
}];
}