2012-09-14 73 views
1

我有一个UITableView,我试图从服务器沿着其他数据(例如照片评论)填充照片。 UITableView上的表单元格具有一个设置为setImageWithURL:placeHolderImage:的UIImageView。问题是仅显示占位符图像。AFNetworking - setImageWithURL返回401

我已经子类AFHTTPClient和我使用基本身份验证与我的服务器。所以,我做这样的事情:

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

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

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

回答

1

虽然setImageWithURL:placeHolderImage:是你可能不得不使用一些变通,以得到这个工作,只要你想它也超级方便的方法。由于图像下载通常不需要认证,这并不令人感到意外。您可以更改UIImageView+AFNetworking.m的代码。这样,您可以使用setAuthorizationHeaderWithUsername方法来授权您自己。

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

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]; 
}