SDWebImage cell无法加载图片,只有滑动tableview才会加载图片

1、使用了系统的cell会产生这个问题,滑动加载了是去沙盒获取图片

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:@"cell"];
}
[cell.imageView sd_setImageWithURL:_imageURL[indexPath.row]
                  placeholderImage:nil
                           options:SDWebImageRetryFailed];

return cell;

使用自定义的cell就不会产生这个问题

TestTableViewCell *testCell = [TestTableViewCell cellWithTableView:tableView];
[testCell.testImageView sd_setImageWithURL:_imageURL[indexPath.row]
                          placeholderImage:nil
                                   options:SDWebImageRetryFailed];

return testCell;

2、对下载之后的图片要做自己的处理

SDWebImageDownloaderOperation.m

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    @synchronized(self) {
        self.dataTask = nil;
        dispatch_async(dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
            if (!error) {
                [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self];
            }
        });
    }
    
    if (error) {
        [self callCompletionBlocksWithError:error];
    } else {
        if ([self callbacksForKey:kCompletedCallbackKey].count > 0) {
            /**
             *  See #1608 and #1623 - apparently, there is a race condition on `NSURLCache` that causes a crash
             *  Limited the calls to `cachedResponseForRequest:` only for cases where we should ignore the cached response
             *    and images for which responseFromCached is YES (only the ones that cannot be cached).
             *  Note: responseFromCached is set to NO inside `willCacheResponse:`. This method doesn't get called for large images or images behind authentication
             */
            if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached && [[NSURLCache sharedURLCache] cachedResponseForRequest:self.request]) {
                // hack
                [self callCompletionBlocksWithImage:nil imageData:nil error:nil finished:YES];
            } else if (self.imageData) {
                
                /******************** 在这里对图片进行处理 ********************/
                //  比如我的是在 下载之后的图片数据 进行blowfish解密
                NSDictionary *imageDataDict    = [NSJSONSerialization JSONObjectWithData:self.imageData options:NSJSONReadingAllowFragments | NSJSONReadingMutableContainers error:nil];
                NSString *base64String         = imageDataDict[@"data"];
                NSData *decodedData            = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
                NSData *keyData                = [JAX_kBlowFishKey dataUsingEncoding:NSUTF8StringEncoding];
                NSData *imageData              = [NSData blowfishDecrypt:decodedData usingKey:keyData];
                self.imageData = imageData.mutableCopy;
                
              /******************** 在这里对图片进行处理 ********************/
                UIImage *image = [UIImage sd_imageWithData:self.imageData];
                NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
                image = [self scaledImageForKey:key image:image];
                
                // Do not force decoding animated GIFs
                if (!image.images) {
                    if (self.shouldDecompressImages) {
                        if (self.options & SDWebImageDownloaderScaleDownLargeImages) {
#if SD_UIKIT || SD_WATCH
                            image = [UIImage decodedAndScaledDownImageWithImage:image];
                            [self.imageData setData:UIImagePNGRepresentation(image)];
#endif
                        } else {
                            image = [UIImage decodedImageWithImage:image];
                        }
                    }
                }
                if (CGSizeEqualToSize(image.size, CGSizeZero)) {
                    [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}]];
                } else {
                    [self callCompletionBlocksWithImage:image imageData:self.imageData error:nil finished:YES];
                }
            } else {
                [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}]];
            }
        }
    }
    [self done];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • tableView加载网络图片 需求的效果图 数据结构 获取模型数组 准备模型 .h文件 .m文件 KVC字典转模...
    月下独酌灬阅读 6,547评论 4 18
  • 生活总有一些喜好,或把酒言欢,或纵情山水,或渔歌唱晚,或浪遏飞舟,或指点江山……太多的喜欢和乐趣,生活中更有很多故...
    天天读览阅读 2,669评论 0 3
  • 一.web前端开发工程师 1.web前端开发工程师是做什么的 要与网站打交道 2.成为web前端工程师的条件 兴趣...
    JustinPenChia阅读 3,085评论 0 1
  • 何人 乌西亚、以赛亚 乌西亚的生命中,有两件事情,值得我们留意。第一件事情,就是他心高气傲。以致行事邪僻。干饭耶和...
    活水之泉阅读 2,241评论 0 0