iOS: TableView с несколькими изображениями в строке (SDWebImage)
Я немного отчаялся из-за моего секционного представления таблицы. Я использую пользовательский UITableViewCell с 4 изображениями, как показано ниже:
Я пытаюсь загрузить изображения через SDWebImage для каждой ячейки.
Все процедуры загрузки выполняются в моем пользовательском UITableViewCell, а не в UITableViewController. От cellForRowAtIndexPath
я просто звоню [cell setup]
который выполняет следующий код в текущей ячейке:
NSArray *imageViews = [NSArray arrayWithObjects:self.imageView1, self.imageView2, self.imageView3, self.imageView4, nil];
for (int i = 0; i < self.products.count; i++) {
Product *currentProduct = [self.products objectAtIndex:i];
UIImageView *currentImageView = [imageViews objectAtIndex:i];
NSString *thumbURL = [[CommonCode getUnzippedDirectory] stringByAppendingPathComponent:currentProduct.collectionFolderName];
thumbURL = [thumbURL stringByAppendingPathComponent:thumbFolder];
thumbURL = [thumbURL stringByAppendingPathComponent:currentProduct.product_photo];
[currentImageView setContentMode:UIViewContentModeScaleAspectFit];
[currentImageView setImageWithURL:[NSURL fileURLWithPath:thumbURL]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
}
Все изображения хранятся в каталоге документов и не превышают макс. 500Кб.
Проблема:
Моя проблема в том, что когда я прокручиваю свой просмотр таблицы, он внезапно падает, и я не знаю почему. Включение символической точки останова для всех исключений показывает, что происходит сбой из-за одной строки в SDWebImage. К сожалению, нет вывода отладчика: (он падает, где размещено изображение)
UIImage *image = nil;
if ([imageOrData isKindOfClass:[NSData class]])
{
image = [[UIImage alloc] initWithData:(NSData *)imageOrData];
}
Я также пытался загрузить изображения через dispatch_asnyc
с похожим результатом. Возможно ли, что это как-то связано с одновременными файловыми операциями?
Кроме того, я получаю Предупреждения о Памяти, когда я выполняю прокрутку очень быстро, так что мне нужно очистить кэш SDWebImage. В то же время он останавливается на строке кода в SDWebImage, упомянутой выше.
Я уже искал в Интернете в течение 2 дней, и я не нашел что-то полезное. Буду рад некоторым подсказкам, чтобы решить эту проблему. Если кому-то понадобятся дополнительные данные, такие как отчеты о сбоях или что-то еще, просто дайте мне знать, и я предоставлю их быстро.
1 ответ
Я столкнулся с той же проблемой, но я временно решаю ее, как показано ниже, но это вызывает проблемы с памятью, особенно на iPhone 4s
NSArray *arrImgs = cellModel.thumbnails_qqnews;
if (arrImgs.count > 0) {
[self.imgView.subviews enumerateObjectsUsingBlock:^(__kindof UIImageView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[obj sd_setImageWithURL:[NSURL URLWithString:arrImgs[idx]] placeholderImage:[UIImage imageNamed:@"placeholdImage"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image != nil) {
obj.image = [UIImage cutImageWithTargetSize:[NEMulTiNewsCell getImgSize] image:image];
}
}];
}];
}
Я думаю, что загрузка нескольких изображений нелогична ,, но я думаю, что метод состоит в том, чтобы загрузить несколько изображений, затем нарисовать несколько изображений в одном изображении, а затем отобразить, но это может привести к появлению большого числа строк кода.