2015-02-10 61 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

相关问题