1

我有一个 UITableView,我试图用来自服务器的照片以及其他数据(例如照片评论)填充它。UITableView 上的表格单元格有一个用setImageWithURL:placeHolderImage:. 问题是只显示占位符图像。

我已经继承了 AFHTTPClient 并且我在我的服务器上使用基本身份验证。所以,我正在做这样的事情:

[self setAuthorizationHeaderWithUsername:@"user" password:@"pass"];

当我对服务器执行 GET 请求时,我得到了包含数据和图像路径的 JSON。在该tableView:cellForRowAtIndexPath:方法中,我尝试将 UIImageView 设置为setImageWithURL:placeHolderImage:,但下载图像的每个请求都返回 401 Authorization Required。

我假设对图像 URL 的每次调用不包括我在子类 AFHTTPClient 中拥有的基本身份验证信息。如果确实如此,有没有办法setImageWithURL:placeHolderImage:使用包含基本身份验证信息的子类 AFHTTPClient?还是在每次调用下载图像时我可以采取其他方法来尊重此基本身份验证?

4

2 回答 2

1

虽然这setImageWithURL:placeHolderImage:是一种超级方便的方法,但您可能必须使用一些变通方法才能使其按您想要的方式工作。由于图像下载通常不需要身份验证,这并不奇怪。您可以更改UIImageView+AFNetworking.m. 这样您就可以使用该setAuthorizationHeaderWithUsername方法来授权自己。

或者,您可以利用此处使用的底层方法setImageWithURL:placeHolderImage:创建自己的类似类AFImageRequestOperation,您可以在其中设置适当的授权标头。如果你选择这个,一定要实现类似的缓存方法,以使一切尽可能高效。

于 2012-11-13T00:51:51.797 回答
0

在 AFHTTPClient 类的构造函数中添加以下内容:

[self registerHTTPOperationClass:[AFImageRequestOperation class]];

接下来,实现这样的方法:

- (void) getImageAtPath:(NSString *)path 
{
    NSMutableURLRequest * request = [self requestWithMethod:@"GET" path:path parameters:nil] ;
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
    AFHTTPRequestOperation * operation =
    [self HTTPRequestOperationWithRequest:request
                              success:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        [buffer setData:[operation responseData]];
        NSLog( @"Got image data with length %d" , [buffer length] ) ;        
        // todo : use image raw data to populate image view
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog( @"unable to get data at %@ from the server %@" , path, [error localizedDescription] ) ;
    }] ;
    [operation start];
}
于 2014-07-12T19:20:37.960 回答