iOS: TableView с несколькими изображениями в строке (SDWebImage)

Я немного отчаялся из-за моего секционного представления таблицы. Я использую пользовательский UITableViewCell с 4 изображениями, как показано ниже:

Мой пользовательский UITableViewCell

Я пытаюсь загрузить изображения через 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];
            }
        }];
    }];
}

Я думаю, что загрузка нескольких изображений нелогична ,, но я думаю, что метод состоит в том, чтобы загрузить несколько изображений, затем нарисовать несколько изображений в одном изображении, а затем отобразить, но это может привести к появлению большого числа строк кода.

Другие вопросы по тегам