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
            }

        }];

    }
Другие вопросы по тегам