iPhoneからPOSTリクエスト - AFNetworking
iPhoneのHTTPリクエストが相当めんどくさい。
なにやら設定がごちゃごちゃしてるし、コールバックのDelegateを指定したり、非同期処理を書いたり。
ライブラリもいろんなのがあって、バージョンが違うとか、ARC解除しろだとか。(めんどぅ!)
で、一番使いやすそうなのがAFNetworkingだった。
ここでも、バージョン1.xと2.0で使い分けが必要。
AFNetworking 1.x | AFNetworking 2.0 |
---|---|
Mac OS X 10.7 | Mac OS X 10.8 |
iOS 5 | iOS 6 |
フレームワークを追加するところから、それぞれの実装までを書いた。
フレームワークの追加
まずは例によって、必要なフレームワークを追加する。ここは両バージョンで共通。
以下の3つ。
Security.framework
CFNetwork.framework
SystemConfiguration.framework
AFNetworking 2.0の実装
https://github.com/AFNetworking/AFNetworking
README.mdを読むと、2.0は
が必要とのこと
Lion以下の人は1.xを使いましょー。
Requirements
AFNetworking 2.0 and higher requires Xcode 5, targeting either iOS 6.0 and above, or Mac OS 10.8 Mountain Lion (64-bit with modern Cocoa runtime) and above. For compatibility with iOS 5 or Mac OS X 10.7, use the latest 1.x release. For compatibility with iOS 4.3 or Mac OS X 10.6, use the latest 0.10.x release.
実装は以下の通り。
#import "AFHTTPRequestOperationManager.h" /* --- */ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *params = @{@"foo[height]": @"200", @"foo[weight]": @"100"}; [manager POST:@"http://yourServer.com/hoge.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];
AFNetworking 1.xの実装
1.xはここから持ってくる。
AFNetworking/AFNetworking · GitHub
実装は、
#import "AFHTTPClient.h" /* --- */ NSURL *url = [NSURL URLWithString:@"http://yourServer.com/"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"100", @"foo[height]", @"200", @"foo[weight]", nil]; [httpClient postPath:@"/hoge.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"Request Successful, response '%@'", responseStr); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"[HTTPClient Error]: %@", error.localizedDescription); }];