Я знаю, что это было задано много раз, но, пожалуйста, несите меня, поскольку я пробовал в течение нескольких дней, чтобы найти решение.UITableView перезагружает старые изображения
У меня есть rss-синтаксический анализатор, таблица с текстом, деталями и изображениями, установленными в AccessoryDisclosureIndicator.view.
Изображения загружаются с помощью простого GCD async: быстрая прокрутка для сотен результатов. NO lag, NO ошибки, если у меня хорошая связь.
Проблема в том, что на долю секунды - они мерцают при загрузке, потому что ячейка повторно используется. Кроме того, если соединение плохое, оно иногда оставляет изображение с откидным верхом, но текст/деталь верны, только изображение устарело ... Поэтому позвольте мне повторить, текст/подробности обновляются отлично и НИКОГДА не ошибается, просто изображение иногда редко попадает в очередь неправильно при плохих соединениях/прокручивании вперед и назад.
Мой вопрос, может кто-нибудь помочь мне кэшировать/пометить cell.accs.views? Я пробовал устанавливать cellIDs, но имел проблемы с моей реализацией. Мой ниже код работает отлично, если соединение никогда не замедляется, просто небольшое мерцание при повторной очереди на ячейку, которую я не против.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
[cell.textLabel setNumberOfLines:3];
cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
[cell.detailTextLabel setNumberOfLines:3];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12.0];
cell.detailTextLabel.textColor = [UIColor blackColor];
}
RSSItem * rssItem = (RSSItem *)(_rssParser.rssItems)[indexPath.row];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
//This is what you will load lazily
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:rssItem.imageURL]];
dispatch_sync(dispatch_get_main_queue(), ^{
UIImageView *accImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data ]];
[accImageView setFrame:CGRectMake(0, 0, accImageView.image.size.width, 92)];
cell.accessoryView = accImageView;
//[cell setNeedsLayout];//not needed
});
});
[cell.textLabel setText:rssItem.title];
[cell.detailTextLabel setText:rssItem.summary];
return cell;}
Моих проблемы, по-видимый глубже, чем это, спасибо Тхо – JoshP