iOS:每行多个图像的TableView(SDWebImage)

时间:2013-01-27 12:58:15

标签: ios asynchronous uitableview sdwebimage

我对我的分段表视图有点绝望。我使用一个自定义UITableViewCell,其中有4个图像,如下图所示:

My custom 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"]];
}

图像全部存储在文档目录中,且不大于最大值。 500KB。

问题:

我的问题是,当我滚动浏览我的桌面视图时,它突然崩溃,我不知道为什么。为所有异常启用符号断点表明它因SDWebImage中的一行而崩溃。不幸的是,没有调试器输出:(它崩溃了图像的分配位置)

UIImage *image = nil;
if ([imageOrData isKindOfClass:[NSData class]])
{
    image = [[UIImage alloc] initWithData:(NSData *)imageOrData];
}

我还尝试通过dispatch_asnyc加载图像,结果类似。 它是否可能与并发文件操作有关?

此外,当我滚动速度非常快时,我会收到内存警告,因此我必须清除SDWebImage的缓存。同时它停在上面提到的SDWebImage中的代码行。

我已经在网上搜索了2天,但我找不到有用的东西。我很乐意提供一些解决这个问题的提示。如果有人需要其他数据,例如崩溃报告或其他内容,请告诉我,我会尽快提供。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但我暂时解决了这个问题,但是导致内存问题,特别是在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];
            }
        }];
    }];
}

我认为多图像下载是不合逻辑的,但我认为下载多图像的方法然后在一个图像中绘制多个图像然后显示,但它可能会创建大量的代码行。