显示AFNetworking + UIImageView占位符图像,但不显示URL图像

时间:2012-02-27 03:31:48

标签: ios ios5 uiimageview afnetworking

我正在尝试使用AFNetworking UIImageView调用来加载来自URL的图像,如下所示:

[self.image setImageWithURL:[NSURL URLWithString:feed.imageURL] placeholderImage:     [UIImage imageNamed:@"logo"]];

占位符图像始终显示,但“feed.imageURL”中的实际图像永远不会显示。我已经验证了网址实际上是正确的。我甚至硬编码确保,但仍然没有。

我的基本应用设置是一个标签控制器......在viewDidLoad中,我调用了一个方法“fetchFeed”,它执行HTTP请求来收集我的JSON数据。

我的请求块如下:

AFJSONRequestOperation *operation = [AFJSONRequestOperation
                                    JSONRequestOperationWithRequest:request
                                     success:^(NSURLRequest *request, NSHTTPURLResponse   *response, id JSON) {
                                         [self parseDictionary:JSON];
                                         isLoading = NO;
                                         [self.tableView reloadData];

                                         } failure:^(NSURLRequest *request,   NSHTTPURLResponse *response, NSError *error, id JSON) {
                                             NSLog(@"Error: %@", error);
                                             [self showNetworkError];
                                             isLoading = NO;
                                             [self.tableView reloadData];
                                         }];
operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
[queue addOperation:operation];

5 个答案:

答案 0 :(得分:9)

原来我请求图片的服务器正在发送content-type "image/jpg",默认情况下,AFNetworking不支持此文件类型。

我将AFImageRequestOperation中的类方法更改为:

+ (NSSet *)defaultAcceptableContentTypes {
return [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", @"image/jpg", nil];
}

它解决了我的问题。

答案 1 :(得分:2)

您可以设法接受此库中您想要的content-type只需更改request,如下所示:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:yourURL];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

并调用AFNetworking方法:

AFJSONRequestOperation *operation = [AFJSONRequestOperation
                                     JSONRequestOperationWithRequest:request
                                     success:^(NSURLRequest *request, NSHTTPURLResponse   *response, id JSON) {
                                     } failure:^(NSURLRequest *request,   NSHTTPURLResponse *response, NSError *error, id JSON) {
                                     }];

这样您就可以覆盖content-type 而无需更改库。

答案 2 :(得分:2)

默认情况下,AFNetworking不支持 image / jpg MIME TYPE

您可以在不修改AFNetworking库的情况下支持它

[AFImageRequestOperation addAcceptableContentType:@"image/jpg"];

答案 3 :(得分:0)

必须在主线程上执行操作UI的所有操作。所以你可能需要使用' performSelectorOnMainThread:'在完成块中重新加载tableview数据时。

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]

答案 4 :(得分:0)

我遇到了类似的问题,但事实证明我传递的是一个包含空格的网址。当我使用stringByAddingPercentEscapesUsingEncoding:对网址进行正确编码时,现在会加载图片。