У меня есть табличный вид с пользовательскими ячейками. Каждая ячейка имеет изображение, заголовок и описание. Когда я впервые загружаю таблицу, она загружается отлично. если я медленно прокручиваю изображение, также, похоже, работает нормально. Как только я быстро прокручиваю (при условии, что количество ячеек достаточно велико, чтобы не вписываться без прокрутки вверх и вниз), изображения начинают изменять ячейки в случайном порядке. Некоторые ячейки имеют одинаковое изображение дважды.Пользовательские изображения сот меняются самостоятельно в UITableView
Любая подсказка, почему это происходит?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
BookmarkCellViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NewsArticle *currArt = [self.lN_Dept objectAtIndex:indexPath.row];
if(currArt.artImage == Nil)
{
if([currArt.mainImage_URL rangeOfString:@"<img src="].location != NSNotFound)
{
NSRange range = [currArt.mainImage_URL rangeOfString:@"<img src=\"/CONC/"];
NSString *substring = [[currArt.mainImage_URL substringFromIndex:NSMaxRange(range)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSRange range2 = [substring rangeOfString:@"\""];
NSString *substring2 = [[substring substringToIndex:NSMaxRange(range2)-1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *imageURL = [PUB_URL stringByAppendingString:substring2];
[self downloadImageWithURL:[NSURL URLWithString:imageURL] completionBlock:^(BOOL succeeded, UIImage *image) {
if (succeeded) {
currArt.artImage = image;
cell.ArtDisplayImage.image = currArt.artImage;
}
}];
}
}
else
{
cell.ArtDisplayImage.image = currArt.artImage;
}
[cell configureCellForEntry:currArticle];
return cell;
}
- (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *Data, NSError *error) {
if (!error)
{
UIImage *image = [[UIImage alloc] initWithData:Data];
completionBlock(YES,image);
} else{
completionBlock(NO,nil);
}
}];
}
Посмотрите мой ответ здесь: http://stackoverflow.com/questions/7852033/gcd-uitableview-asynchronous-load-images-wrong-cells-are -loaded-to-new-image/7852138 # 7852138 – hypercrypt
@hypercrypt Не могли бы вы привести пример, как бы вы сделали это с помощью кода выше? – dan