SDWebImage下载但不显示图像

时间:2016-05-30 05:50:45

标签: ios objective-c uicollectionview sdwebimage

我正在使用UICollectionView

图像来自FTP服务器。 这是我的代码,用于下载和显示按钮上的图像:

[tempp sd_setImageWithURL:[NSURL URLWithString:[[arrFilterData objectAtIndex:indexPath.row] valueForKey:@"ZoomPrdImg"]] //PrdImg //ZoomPrdImg
             placeholderImage:nil
                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                        if (image) {
                            myCell.image.userInteractionEnabled = YES;
                            dispatch_async(dispatch_get_main_queue(), ^{
                                [myCell.image setImage:image forState:UIControlStateNormal];
                                [myCell setNeedsLayout];
                            });
                        }
                    }];

myCell.image是我设置下载图片的按钮。 现在我没有得到该图像成功下载但坚果显示在按钮中。 UICollectionView中有3000多张图片,但它显示的是一些图片,还有一些空白。

这怎么可能?怎么解决这个?那里有什么问题?

修改 tempp在viewDidLoad

中分配
- (void)viewDidLoad {
    tempp = [[UIImageView alloc] init];
}

2 个答案:

答案 0 :(得分:0)

替换

 [myCell.image setImage:tempp.image forState:UIControlStateNormal];
                            [myCell setNeedsLayout];

 [myCell.image setImage:image forState:UIControlStateNormal];
                            [myCell setNeedsLayout];

因为在您的完成处理程序中,您将在image对象

中获取图像

答案 1 :(得分:0)

我认为您的变量tempp被破坏,并取消对图像的请求。 将请求代码更改为

[myButton sd_setImageWithURL:[NSURL URLWithString:@"MyURL"] forState:UIControlStateNormal completed:yourCompletitionBlock];

一切都应该没问题。

<强> UPD

根据你对tempp变量的回答,我认为你每页看到一个Image,因为当你为许多单元调用sd_setImage时,只加载最后一个请求。请求是异步的,如果您请求新映像,则会取消旧请求。

来自SDWebImage的代码:

- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
    [self sd_cancelCurrentImageLoad];
    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

第一行取消旧请求。