iOS - SDWebImage загрузка неправильного изображения
Я использую библиотеку SDWebImage для кэширования и отложенной загрузки. Но я обнаружил, что иногда он показывает изображение другой клетки.
Деталь Сценерио
- Существует CollectionView с ячейками, содержащими UIImageView и Labels.
- 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];
}
}];
}
2 ответа
Проблема с вашим подходом заключается в том, что если вы прокручиваете или когда изображение загружается полностью, переменная ячейки будет содержать адрес любой другой ячейки, а не фактической ячейки, для которой вы хотите отобразить изображение. Вот почему изображение отображается как неправильное.
Измените это как:
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"); }
];
}
После реализации Ответа Мидхуна я нашел другой Метод согласно Новой библиотеке 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
}
}];
}