我正在使用AFNetworking的UIImageView+AFNetworking.h
将在线图片异步加载到UIImageView
。
当我使用setImageWithURLRequest:
时,远程图像加载得非常好,但是当我尝试使用setImageWithURLRequest:placeholderImage:success:failure
时,会下载远程图像,但UIImageView不会将其设置为UIImage。
这是我的代码:
@property (strong) IBOutlet UIImageView *imageView;
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[_imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://i.imgur.com/fVhhR.png"]]
placeholderImage:nil
success:^(NSURLRequest *request , NSHTTPURLResponse *response , UIImage *image ){
NSLog(@"Loaded successfully: %d", [response statusCode]);
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
NSLog(@"failed loading: %@", error);
}
];
}
图像始终成功加载,状态代码始终为200
。但我必须将[_imageView setImage:image];
添加到success
的{{1}}块以设置图像。
我正在使用iOS 6.0
有什么想法吗?
答案 0 :(得分:29)
如果提供成功块,则您负责设置UIImageView的图像属性。如果你提供一个零成功块,那么AFNetworking会为你做。
这是UIImageView+AFNetworking.m
(第117行)的相关部分:
if (success) {
success(operation.request, operation.response, responseObject);
} else {
self.image = responseObject;
}
或者,只需使用-setImageWithURL:placeholderImage:
而不使用完成块。
答案 1 :(得分:2)
我遇到了同样的问题,在对图书馆的文档感到沮丧后,我发现了罗宾上面提到的内容。所以现在我正在使用:
[imageView setImageWithURLRequest:imageRequest placeholderImage:nil success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"Unable to retrieve image");
}];
像魅力一样工作。我希望这有帮助。
答案 2 :(得分:2)
文档很清楚:
如果指定了成功块,则由块负责 在返回之前设置图像视图的图像。如果没有成功 指定了块,设置图像的默认行为
self.image = image
已应用。
所以你可以传递一个nil块来获得成功(如上所述)或者调用setImage:如果你指定一个块你自己的图像
答案 3 :(得分:1)
在您的成功屏幕中,您需要将UIImaage *image
提供给UIImageView
。我假设你得到了NSLog(@"Loaded successfully: %d", [response statusCode]);
此外,您的占位符图片显示为nil
。你不想在那里加载占位符吗?
答案 4 :(得分:1)
对于那些偶然发现此问题并在网上浏览和搜索时到达此处的人,这是另一个原因 - 图像可能有错误的文件扩展名。例如,图像可能保存为jpg,但有人决定将其文件扩展名更改为png。
以下是如何检查:首先您需要使用网络监控工具(例如Charlie)并检查图像请求" Content-Type" HTTP标头。假设它有价值" image / png"。这意味着后端上的图像具有png文件扩展名。现在,在模拟器上运行您的应用程序,然后转到您的应用程序的模拟器文件夹:
/ Users / you / Library / Application Support / iPhone模拟器/ select-folder-with-your-iOS-version / Applications / YourApp / Library / Caches / yourAppBundleId / fsCachedData /
找到您的图像文件并将png或jpg扩展名添加到此文件中(AFNetworking缓存没有文件扩展名的图像文件,因此需要添加它以便使用预览打开它)。使用“预览”打开它,然后按“工具”/“显示检查器”。检查"文档类型"在打开的面板中。如果它与" PNG图像"不同(例如JPEG图像)那么原因是你需要在后端修复图像 - 用适当的图像编辑程序打开它并将其保存为PNG。