AFNetworking setImageWithURLRequest未设置远程图像

时间:2012-11-12 16:08:27

标签: ios uiimageview afnetworking

我正在使用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

有什么想法吗?

5 个答案:

答案 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。