iphone - sdwebImage setImageWithURL : placeholderImage: completed:

标签 iphone sdwebimage

我使用SDWebImage新版本并调用:

    self.imgIndicatorView.center=self.img.center;
    self.imgIndicatorView.hidden=NO;
    [ self.imgIndicatorView startAnimating];
    __block UIActivityIndicatorView *indicatorView= self.imgIndicatorView;

     NSLog(@"myTopics.img.small=%@",myTopics.img.small);
    [self.img setImageWithURL:[NSURL URLWithString:@"http://ww1.sinaimg.cn/thumbnail/acc940bdj.jpg"]
                           placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){

                                NSLog(@"newImageNotCached:break.png  myTopics.img.small" );
                               if(!error ){

                                   CGRect  sFrame=self.img.frame;

                                   CGSize newSize=image.size;

                                   if (newSize.height>80) {

                                       if (newSize.width>newSize.height) {
                                           newSize.height=newSize.height *80.0/image.size.width;
                                           newSize.width=80;
                                       }else{
                                           newSize.height=80;
                                           newSize.width=newSize.width*80.0/image.size.height;

                                       }


                                   }else{
                                       if (newSize.width>80) {
                                           newSize.height=newSize.height *80.0/image.size.width;
                                           newSize.width=80;
                                       }else{

                                       }

                                   }
                                   sFrame.size=newSize;
                                   self.img.frame=sFrame;

                                   indicatorView.hidden=YES;
                                   [indicatorView stopAnimating];
                                   [indicatorView removeFromSuperview];
                               }else{

                                   self.img.image=[UIImage newImageNotCached:@"break.png"];

                                   indicatorView.hidden=YES;
                                   [indicatorView stopAnimating];
                                   [indicatorView removeFromSuperview];
                               }


                           }];

但有时日志 NSLog(@"newImageNotCached:break.png myTopics.img.small") 不会显示 url(@"http://ww1.sinaimg.cn/thumbnail/acc940bdj.jpg ") 是否中断。因此指标 View 始终存在。为什么该方法不调用已完成的 block ?

最佳答案

在。 UIImageView + WebCache.m 第 55 行。

   if (url)
{
    __weak UIImageView *wself = self;
    id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
    {
        __strong UIImageView *sself = wself;
        if (!sself) return;
        if (image)
        {
            sself.image = image;
            [sself setNeedsLayout];
        }
        if (completedBlock && finished)  // NOTE: finished == YES, the completedBlock could be called.

        {
            completedBlock(image, error, cacheType);
        }
    }];
    objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

在 SdwebImageManager.m 第 81 行

 if (!url || !completedBlock || (!(options & SDWebImageRetryFailed) && [self.failedURLs containsObject:url])) // NOTE: failedURLs contain the url
{
    // TIPS:  ERROR OCCURED,  DO NOTHING
    if (completedBlock) {
        // NOTE: finished flag was NO. Please set it as YES, And try again.
        completedBlock(nil, nil, SDImageCacheTypeNone, NO); 
    }
    return operation;
}

因此,您编写的completedBlock只会在第一次(发生错误时)被调用。

关于iphone - sdwebImage setImageWithURL : placeholderImage: completed:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538850/

相关文章:

iphone - iPhone 中的 Twitter 集成

iphone - initWithNibName VS NSBundle 的 loadNibNamed

ios - 在 AWS 套接字 S3 存储桶中缓存

iphone - 如何创建一个 NSDictionarys 数组

iphone - WSDL/XML 解析 iOS objective-c

ios - IBoutlet 不适用于 xCode

swift - iOS swift : SDWebImage Image Loading Error

iphone - SDImageCache - imageFromMemoryCache 返回 nil

ios - 避免我的 iOS 应用程序中的文件易于替换

ios - 使用 SDWebImage block 的 ImageView 上的圆形进度条