Ios AFNetworking客户端子类未解析响应
我试图通过将AFHTTPClient子类化并设置基本路径来实现AFNetworking客户机Ios AFNetworking客户端子类未解析响应,ios,afnetworking,Ios,Afnetworking,我试图通过将AFHTTPClient子类化并设置基本路径来实现AFNetworking客户机 #define WineAPIBaseURLString @"http://localhost:3000/" @implementation WineAPIClient +(id)sharedInstance{ static WineAPIClient *__sharedInstance; static dispatch_once_t onceToken; dispatch_once(&a
#define WineAPIBaseURLString @"http://localhost:3000/"
@implementation WineAPIClient
+(id)sharedInstance{
static WineAPIClient *__sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedInstance = [[WineAPIClient alloc]initWithBaseURL:[NSURL URLWithString:WineAPIBaseURLString]];
});
return __sharedInstance;
}
- (id)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if(self){
[self setParameterEncoding:AFJSONParameterEncoding];
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
}
return self;
}
@end
现在在我的视图控制器中调用客户端会给我带来奇怪的结果。例如,以下代码:
[[WineAPIClient sharedInstance] getPath:@"wines"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error fetching wines!");
NSLog(@"%@",error);
}];
它在控制台上记录了一组数字:
2013-03-11 16:25:36.411 AFNetworking4[1934:1260b] GET 'http://localhost:3000/wines'
2013-03-11 16:25:36.430 AFNetworking4[1934:f803] <5b0a2020 7b0a2020 2020225f 5f76223a 20302c0a 20202020 225f6964 223a2022 35313131 35656235 37356265 35383766 3034303...
2013-03-11 16:25:36.429 AFNetworking4[1934:13003] 200 'http://localhost:3000/wines' [0.0173 s]
我正在使用AFNetworking的0.10.1分支(我必须支持4.x设备,因此无法升级…)
有没有办法纠正这个问题
非常感谢。AFJSONParameterEncoding仅影响随请求传递的参数。看起来您正在接收编码为NSData的数据。您可以尝试使用
initWithData
创建一个NSString,然后记录该字符串。您还可能需要确保您的客户机返回的是实际的JSON。在ruby中,这可能需要一个to_json
方法。谢谢,没错。。。我接收的是NSData,而不是解析的JSON。完全丢失了有关此部件的文档信息
这些内容类型仅在以下情况下作为请求的响应对象返回:1)
HTTP客户端已向注册了相应的AFHTTPRequestOperation子类-
registerHTTPOperationClass:,以及2)请求接受HTTP标头适用于
请求的内容类型。不这样做可能会导致获取的NSData实例
方法的成功或失败回调块,如getPath:parameters:success:failure。
例如,要使用JSON数据,请执行[client registerHTTPOperationClass:
[AFJSONRequestOperation类]]和[client setDefaultHeader:@“接受”
值:@“application/json”]初始化HTTP客户端时
因此,修复程序只是将接受应用程序/json默认头添加到客户端
NSURL *url = [NSURL URLWithString:@"http://localhost:3000/wines"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"%@",JSON);
} failure:nil];
[operation start];