AFNetworking setImageWithURLRequest 不更新 UIImageView
Posted
技术标签:
【中文标题】AFNetworking setImageWithURLRequest 不更新 UIImageView【英文标题】:AFNetworking setImageWithURLRequest not updating UIImageView 【发布时间】:2015-02-10 10:41:46 【问题描述】:我正在使用 setImageWithURLRequest:placeholderImage:success:failure
从 URL 下载图像,并且图像的下载工作正常。我遇到的问题是,当我将下载的图像设置为 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 是正确的,因为当我将其复制并粘贴到浏览器中时,我得到了我的图像。
谁能告诉我如何让我的代码工作以更新 URL?我将UIImageView
分配给弱属性是否正确?我这样做是因为使用 self 或强变量可能会导致保留周期。
【问题讨论】:
此方法自动设置图像。删除[userCardImageView setImage:[UIImage imageWithData:userCardImageData]]
【参考方案1】:
看来你应该实现这一行
[userCardImageView setImage:image];
而不是
[userCardImageView setImage:[UIImage imageWithData:userCardImageData]];
在你的成功中
PS:如果你想在 self.userCardImageView 中设置图像,你宁愿声明一个弱控制器而不是一个弱 UIImageView 引用。类似的东西
__weak __typeof(&*self)weakSelf = self
【讨论】:
感谢您回答 James,我一直在代码中使用[userCardImageView setImage:image];
,但在编辑时我删除了错误的行。我尝试使用您建议的弱控制器并且有效,非常感谢!【参考方案2】:
实际上你并没有正确地将下载的图像分配给图像视图。[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);
];
希望对你有帮助
【讨论】:
感谢 Saif 的回答,不幸的是,这并没有奏效,但 James 建议使用 weakSelf。【参考方案3】:应该够了:
[self.userCardImageView setImageWithURL:url];
【讨论】:
感谢 orkenstein 的建议,我最初正在使用它并且它有效,但我需要对下载进行更多控制,因此必须使用块以上是关于AFNetworking setImageWithURLRequest 不更新 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
如何在旧的 AFNetworking 中使用 AFNetworking 2.0+?
无法识别的选择器发送到 UIButton+AFNetworking.h 的实例(UIImageView+AFNetworking 也是)