22

このチュートリアルに従って、HTML リクエストを使用して基本的な iPhone アプリを作成しています。

チュートリアルでは、AFNetworking で AFJSONRequestOperation を使用しています。問題は、AFJSONRequestOperation がなくなった AFNetworking バージョン 2 を使用していることです。

したがって、もちろん、次のコード (チュートリアルの途中から、「Querying the iTunes Store Search API」という見出しの下) はコンパイルされません。

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 を何に置き換えるかです。これをグーグルで検索したところ、他の誰もこの質問をしていないようです。

4

2 に答える 2

30

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
}];
于 2014-01-22T21:23:05.847 に答える
7

AFNetworking 2 に関する NSHipster の記事から:

AFNetworking 2.0 の新しいアーキテクチャのブレークスルーの 1 つは、要求の作成と応答の解析にシリアライザーを使用することです。シリアライザーの柔軟な設計により、より多くのビジネス ロジックをネットワーク層に転送し、以前に組み込まれた既定の動作を簡単にカスタマイズできます。

AFNetworking 2 では、シリアライザー (HTTP データを使用可能な Objective C オブジェクトに変換するオブジェクト) が、要求操作オブジェクトとは別のオブジェクトになりました。

AFJSONRequestOperation などは存在しません。

AFJSONResponseSerializer ドキュメントから:

AFJSONResponseSerializerAFHTTPResponseSerializerJSON 応答を検証およびデコードする のサブクラスです。

あなたが言及した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];
于 2014-01-22T21:36:43.183 に答える