2015-02-10 42 views
0

我正在使用setImageWithURLRequest:placeholderImage:success:failure從URL下載圖像,並且圖像的下載工作正常。我遇到的問題是,當我將下載的圖像設置爲UIIMageView時,沒有任何內容顯示,但佔位符已被刪除。AFNetworking setImageWithURLRequest不更新UIImageView

我的代碼如下:

__weak UIImageView *userCardImageView; 


AFImageResponseSerializer *serializer = [[AFImageResponseSerializer alloc] init]; 
serializer.acceptableContentTypes = [serializer.acceptableContentTypes setByAddingObject:@"image/png"]; 
self.userCardImageView.imageResponseSerializer = serializer; 

[self.userCardImageView setImageWithURLRequest:urlRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

     [userCardImageView setImage:image]; 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

     if (error) 
     { 
      NSLog(@"Error: %@", error); 
      NSLog(@"Error response:  %@", response); 
     } 

    }]; 

的網址,當我複製正確的,過去它到瀏覽器中,我得到我的形象。

有人可以告訴我如何讓我的代碼工作來更新URL?我是否有權將UIImageView分配給弱財產?我這樣做是因爲使用自我或強大的變量可能導致保留週期。

+0

此方法會自動設置圖像。刪除'[userCardImageView setImage:[UIImage imageWithData:userCardImageData]]' – orkenstein 2015-02-10 10:59:47

回答

3

看來你應該實現線

[userCardImageView setImage:image];  

,而不是

[userCardImageView setImage:[UIImage imageWithData:userCardImageData]]; 

在你的成功塊

PS:如果是你想設置圖像的self.userCardImageView,你應該聲明一個弱控制器而不是弱UIImageView引用。像

__weak __typeof(&*self)weakSelf = self  
+1

感謝您回覆James,我一直在使用'[userCardImageView setImage:image];'在我的代碼中,但在編輯時我刪除了錯誤的行。我嘗試了使用你建議的弱控制器,並且工作,非常感謝! – adamtrousdale 2015-02-10 11:04:45

0

實際上,您並未正確指定下載的圖像到圖像視圖。 [userCardImageView setImage:[UIImage imageWithData:userCardImageData]];,我們不必將圖像從這個變量userCardImageData分配,試試這個代碼

[self.userCardImageView setImageWithURLRequest:urlRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [userCardImageView setImage:image]; //set image in main thread , we got downloaded image as parameter in block 
    }); 


} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 

    if (error) 
    { 
     NSLog(@"Error: %@", error); 
     NSLog(@"Error response:  %@", response); 
    } 

}]; 

希望這有助於

+0

感謝您回答賽義夫,這並沒有很好的工作,但詹姆斯的使用weakSelf的建議。 – adamtrousdale 2015-02-10 11:10:27

0

的東西應該有足夠的只是:

[self.userCardImageView setImageWithURL:url]; 
+0

感謝orkenstein的建議,我最初是在使用它,它工作,但我需要更多的控制下載,所以不得不使用塊 – adamtrousdale 2015-02-10 11:11:32

相關問題