2013-05-14 44 views
2

我使用SDWebImage新版本,並呼籲:sdwebImage setImageWithURL:placeholderImage:完成:

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」)是break.so指示器視圖總是存在。爲什麼該方法不能調用該塊完成?

回答

1

In。的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將只在第一次(發生錯誤時)調用。