AFHTTPClientをサブクラス化し、ベースパスを設定して、AFNetworkingクライアントを実装しようとしました。
#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]
JSONを正しく解析するようにクライアントを修正するにはどうすればよいですか?クライアントの実装に間違いはありますか?
注意すべき点の1つは、カスタムクライアントを使用していない場合、まったく同じURIが正しく機能していることです。
IE:
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];
AFNetworkingの0.10.1ブランチを使用しています(4.xデバイスをサポートする必要があるため、アップグレードできません...)。
それを修正する方法はありますか?
どうもありがとう。