Повторная загрузка изображения в tableviewcell

У меня есть таблица с каждой ячейкой, имеющей свое изображение. Я использую AsyncImageView для загрузки изображений из Интернета в просмотр изображений. Некоторые виды изображений загружают повторное изображение в разные ячейки:

На приведенном выше снимке экрана изображение B загружается дважды, когда это не требуется. Это происходит довольно часто, когда я прокручиваю вверх и вниз. Когда это происходит, я прокручиваю и возвращаюсь к ячейке, и загружается правильное изображение. Позже, когда я снова прокручиваю назад, возникает та же проблема. Я не могу проследить, откуда возникла проблема. У кого-нибудь есть идеи?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   
{
    static NSString *simpleTableIdentifier = @"CustomCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:simpleTableIdentifier owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }else
    {
        [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:cell.logoImageView];
        cell.logoImageView.image = nil;
    }

    //Cause sections
    NSMutableArray *tempArray = [self.sectionArray objectAtIndex:indexPath.section];
    MyObject *myObject = [tempArray objectAtIndex:indexPath.row];

    NSString *thumbUrlString = [myObject valueForKey:@"thumbUrl"];

    if([thumbUrlString length]>0 )
    {
        NSString *imageUrl= [NSString stringWithFormat:@"http://www.sitename.com/%@",thumbUrlString];
        NSURL *url = [NSURL URLWithString:imageUrl];
        cell.logoImageView.imageURL=url;
    }else{
        cell.logoImageView.image = [UIImage imageNamed:@"placeholder.png"];
    }

    return cell;
}

2 ответа

Решение

Сделал глупую ошибку с:

 cell.logoImageView.image = nil 

Изменил это на:

cell.logoImageView.imageURL = nil 

Я полагаю, что когда вы установите cell.logoImageView.imageURL Вы тогда называете что-то вроде [AsyncImageLoader sharedLoader] loadImageAtURL:logoImageView.imageURL] внутри вашего CustomCell код или аналогичный.

Вероятно, вы используете один и тот же общий AsyncImageLoader для всех изображений, поэтому каждый раз, когда вы запрашиваете новое изображение, вы перезаписываете предыдущий запрос изображения, или вы создаете разные потоки для каждого запроса, поскольку они возвращают свои результаты в неправильную ячейку.

Пожалуйста, опубликуйте некоторый код вашего AsyncImageLoader.

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