我有一个UITableView,我试图用其他数据(例如照片评论)填充服务器中的照片。 UITableView上的表格单元格具有使用setImageWithURL:placeHolderImage:
设置的UIImageView。问题是只显示占位符图像。
我已经将AFHTTPClient子类化,我正在使用我的服务器进行基本身份验证。所以,我正在做这样的事情:
[self setAuthorizationHeaderWithUsername:@"user" password:@"pass"];
当我对服务器发出GET请求时,我得到的JSON包含数据和图像的路径。在tableView:cellForRowAtIndexPath:
方法中,我正在尝试使用setImageWithURL:placeHolderImage:
设置UIImageView,但每个下载图像的请求都返回401 Authorization Required。
我假设每次调用图片网址都不包含我在子类AFHTTPClient中的基本身份验证信息。如果确实如此,是否有办法让setImageWithURL:placeHolderImage:
使用包含基本身份验证信息的子类AFHTTPClient?或者,在每次下载图像的调用中,我是否可以采取其他方法来尊重此基本身份验证?
答案 0 :(得分:1)
虽然setImageWithURL:placeHolderImage:
是一种非常方便的方法,但您可能需要使用一些解决方法来使其按照您的需要运行。由于图像下载通常不需要身份验证,因此这并不太令人惊讶。您可以更改UIImageView+AFNetworking.m
的代码。这样您就可以使用setAuthorizationHeaderWithUsername
方法来授权自己。
或者,您可以使用setImageWithURL:placeHolderImage:
使用here的基础方法,并使用AFImageRequestOperation
创建自己的类似类,您可以在其中设置适当的授权标头。如果你选择这个,一定要实现类似的缓存方法,以使一切尽可能高效。
答案 1 :(得分: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];
}