我使用SDWebImage Library进行缓存和延迟加载。但我发现有时它会显示另一个细胞的图像。
详情Scenerio
但有时Imageview中加载的图片会有不同的图像。
让我们说
Index Name Image
0 nameA A
1 nameB B
2 nameC C
3 nameD B
所以这里因为索引有nameD所以图像应该是b" D"但它显示的是nameB的图像,即" 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];
}
}];
}
答案 0 :(得分:3)
您的方法存在的问题是,如果您滚动或完全下载图像,则单元格变量将保存任何其他单元格的地址,而不是您要显示图像的实际单元格。这就是图像显示为错误的原因。
将其更改为:
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"); }
];
}
答案 1 :(得分:0)
在实施了Midhun的答案之后,我找到了另一个方法,根据 SDWebImage的新库。因为新的 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
}
}];
}