1.3系を使っていたのですが、2.0系にバージョンアップして
色々変わっていたのでよく使うものだけ、備忘録がてらまとめてみました。
Manager
1.3系ではAFHTTPRequestOperationを作成して、GET/POSTの設定等を
行っていましたが、2.0系からはそれを管理してくれるManagerが出来ました。
使い方は超簡単
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://hoge/sample.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 成功時の処理.
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 失敗時の処理.
}];
これだけで勝手にJSONに変換して返してくれます。
JSONにパースできない場合はエラーになります。
※ただし、後述のResponseSerializerは設定できない模様
追記 2013/11/08
コメントでご指摘いただき、設定できることが判明したので設定方法を記載しておきます。
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
Request Serialization
今までquery stringとかpostの時のパラメータとかは
自分で加工してましたが、この子のおかげでもう必要なくなりました。
ありがとう!
// GETの時(POSTの場合は第一引数を"POST"に)
NSString* url = @"http://hoge/sample.json";
NSDictionary* param = @{@"ios":@"7.0", @"old":@[@"6.1", @"6.0"]};
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString: url parameters:param];
// 勝手に作ってくれる!
// http://hoge/sample.json?ios=7.0&old[]=6.1&old[]=6.0
// AFJSONRequestSerializerの時はJSONにしてくれる
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:param];
// 楽ですね!
// {"ios": "7.0", "old": ["6.1","6.2"]}
Response Serialization
1.3系はレスポンスのパースをJSONやImageに切り替えたいときに
AFImageRequestOperationやAFJsonRequestOperation等
Operation単位で切り替えてましたが2.0系からはResponseSerializerという
クラスに切り出されてます。
// operationはそのままでserializerを切り替える
NSURL *URL = [NSURL URLWithString:@"http://hoge/sample.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
// こんな感じで設定
op.responseSerializer = [AFJSONResponseSerializer serializer];
// 後は呼ぶだけ
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// 成功
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 失敗
}];
[[NSOperationQueue mainQueue] addOperation:op];
個人的にはこれが一番よかったです。
最後に
これ以外の2.0の変更点は公式に書いてあるので、もし使う方は見てみると
「こんなこと出来るんだ」とちょっと楽しくなると思います。
ぜひ、活用して開発効率をあげてください!