LoginSignup
81
81

More than 5 years have passed since last update.

AFNetworking 2.0

Last updated at Posted at 2013-11-04

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の変更点は公式に書いてあるので、もし使う方は見てみると
「こんなこと出来るんだ」とちょっと楽しくなると思います。
ぜひ、活用して開発効率をあげてください!

参考

公式

81
81
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
81