Edited at

AFNetworking 2.0

More than 3 years have passed since last update.

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の変更点は公式に書いてあるので、もし使う方は見てみると

「こんなこと出来るんだ」とちょっと楽しくなると思います。

ぜひ、活用して開発効率をあげてください!


参考

公式