17

我正在使用 AFNetworkingUIImageView+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块中UIImageView才能设置图像。

我正在使用 iOS 6.0

有任何想法吗?

4

5 回答 5

30

如果您提供了成功块,那么您负责设置 UIImageView 的图像属性。如果您提供 nil 成功块,那么 AFNetworking 会为您完成。

这是UIImageView+AFNetworking.m(第 117 行)的相关部分:

if (success) {
    success(operation.request, operation.response, responseObject);
} else {
    self.image = responseObject;
}

或者,只使用-setImageWithURL:placeholderImage:没有完成块的。

于 2012-11-12T16:42:22.420 回答
2

我遇到了同样的问题,在对图书馆的文档感到沮丧之后,我发现了 Robin 上面提到的内容。所以现在我正在使用:

[imageView setImageWithURLRequest:imageRequest placeholderImage:nil success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSLog(@"Unable to retrieve image");
}];

奇迹般有效。我希望这有帮助。

于 2013-07-16T18:28:16.773 回答
2

文档很清楚:

如果指定了成功块,则该块负责在返回之前设置图像视图的图像。如果未指定成功块, self.image = image则应用设置图像的默认行为。

因此,您可以传递一个 nil 块以获得成功(如上所述),或者如果您指定一个块,您可以自己调用 setImage:image

于 2014-04-08T06:52:32.887 回答
1

在您的成功块中,您需要UIImaage *imageUIImageView. 我假设你得到NSLog(@"Loaded successfully: %d", [response statusCode]);

此外,您的占位符图像似乎是nil. 你不想要一个像加载图像这样的占位符吗?

于 2012-11-12T16:23:29.320 回答
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。

于 2014-06-30T10:44:59.053 回答