次のようにして、HTMLリクエストを使用して基本的なiPhoneアプリを作成しています このチュートリアル。
チュートリアルでは、AFNetworkingでAFJSONRequestOperationを使用しています。問題は、AFJSONRequestOperationがなくなったAFNetworkingバージョン2を使用していることです。
したがって、もちろん、このコード(チュートリアルの約半分から、「ITunes Store SearchAPIのクエリ")コンパイルされません:
NSURL *url = [[NSURL alloc]
initWithString:
@"http://iTunes.Apple.com/search?term=harry&country=us&entity=movie"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"%@", JSON);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response,
NSError *error, id JSON) {
NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
}];
[operation start];
私の質問は、AFNetworking 2.xで作業を続けることができるように、AFJSONRequestOperationを何に置き換えるのですか?私はこれをグーグルで検索しましたが、他の誰もこの質問をしていないようです。
AFHTTPSessionMangerを使用できますか?だから何かのような
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager GET:[url absoluteString]
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
// Handle failure
}];
もう1つの方法は、AFHTTPRequestOperation
を使用して、responseSerializerを[AFJSONResponseSerializer serializer]
に設定することです。だから何かのような
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation
, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// Handle error
}];
から AFNetworking 2に関するNSHipsterの記事 :
AFNetworking 2.0の新しいアーキテクチャのブレークスルーの1つは、要求の作成と応答の解析にシリアライザーを使用することです。シリアライザーの柔軟な設計により、より多くのビジネスロジックをネットワーク層に転送し、以前に組み込まれていたデフォルトの動作を簡単にカスタマイズできます。
AFNetworking 2では、シリアライザー(HTTPデータを使用可能なObjective Cオブジェクトに変換するオブジェクト)は、要求操作オブジェクトとは別のオブジェクトになりました。
したがって、AFJSONRequestOperationなどは存在しなくなります。
から AFJSONResponseSerializerドキュメント :
AFJSONResponseSerializer
はAFHTTPResponseSerializer
のサブクラスであり、JSON応答を検証およびデコードします。
あなたが言及したAPIをヒットするいくつかの方法があります。これが1つです:
NSURL *url = [[NSURL alloc] initWithString:@"http://iTunes.Apple.com/search?term=harry&country=us&entity=movie"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success: %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", operation.responseString);
}];
[operation start];