Для того, чтобы свободно загружать и отображать изображения в моей UITableViewCell, я реализовал следующие:«Модификация autolayout двигатель от фонового потока» в UITableViewCell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *thisCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (_movieCell == nil) {
thisCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Movie* thisMovie = [_movies objectAtIndex:indexPath.row];
thisCell.imageView.image = nil;
thisCell.textLabel.text =thisMovie.Title;
thisCell.imageView.image=[UIImage imageNamed:@"Dummy"];
thisCell.detailTextLabel.text = thisMovie.Year;
NSURL * imageURL = [NSURL URLWithString:[thisMovie.Poster stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:imageURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
UIImage *image = [UIImage imageWithData:data];
if (image) {
dispatch_async(dispatch_get_main_queue(), ^{
UITableViewCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath];
if (updateCell)
updateCell.imageView.image = image;
//[updateCell setNeedsLayout];
});
}
}
}];
[task resume];
return thisCell;
}
Это все работает очень хорошо, за исключением Дело в том, что после нескольких секунд, по крайней мере выполнения видимой части коды, консоль отладки говорит мне
Это приложение модификация autolayout двигателя от фона нити после того, как двигатель был доступен из основной поток.
Это часть действительно простого приложения, в котором нет других материалов для фона, поэтому я думаю, что именно эта часть кода вызывает эту проблему.
Может ли кто-нибудь показать мне ошибку в моем коде или, альтернативно, объяснить способ отладки/отслеживания фоновых потоков?
Спасибо заранее!
Этот фрагмент кода недостаточно для нас, чтобы узнать, где проблема. Yo явно обновляет пользовательский интерфейс из фоновой очереди в другом месте вашей программы. – ozgur
Вы абсолютно правы. См. Мой ответ ниже. – Sjakelien