У меня есть таблица изображений с небольшим текстом. Как это работает: У меня есть модель, которая принимает ответ JSON от Instagram и помещает все это в набор словарей. В моем методе cellForRowAtIndexPath я установил тег ячейки в indexpath.row, а затем начал загрузку изображения (получение URL-адреса из модели) с помощью dispatch_async. После того, как изображение закончило загрузку, у меня есть проверка, чтобы сравнить тег текущей ячейки и текущего indexpath.row, и если они такие же, изображение будет нарисовано. Он отлично работает, пока я не обновляю свою модель. Простое получение одинаковых перезагруженных данных вызывает странное поведение в таблице - оно отображает первые три ячейки как одни и те же изображения. Как это исправить?Обновление UITableView - неправильные ячейки и одинаковые изображения
Вот мой метод клетки:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.tag = indexPath.row;
if (self.loader.parsedData[indexPath.row] != nil)
{
cell.imageView.image = nil;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^(void) {
NSString *url = [self.loader.parsedData[indexPath.row] objectForKey:@"imageLR"];
if ([self.cache objectForKey:url] != nil)
{
NSData *imageData = [self.cache objectForKey:url];
self.tempImage = [[UIImage alloc] initWithData:imageData];
}
else
{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
self.tempImage = [[UIImage alloc] initWithData:imageData];
[self.cache setObject:imageData forKey:[self.loader.parsedData[indexPath.row] objectForKey:@"imageLR"]];
}
dispatch_async(dispatch_get_main_queue(), ^{
if (cell.tag == indexPath.row)
{
cell.imageView.image = self.tempImage;
[cell setNeedsLayout];
}
});
});
cell.textLabel.text = [self.loader.parsedData[indexPath.row] objectForKey:@"id"];
}
return cell;
}
Я попытался положить [TableView reloadData] везде, но это не помогает.