2

ドキュメントで推奨されているように、AFHTTPClientをシングルトンクラスとして実装し、投稿のJSONデータでそれを呼び出し、代わりにJSONデータを受け取ります。

[[BMNetworkCalls sharedInstance] postPath:theURL parameters:theDict success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"my return is: %@", [responseObject valueForKeyPath:@"Result"]);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {            
    NSLog(@"error in network call: %@", [error localizedDescription]);
}];

すべて問題ありませんが、エラー( "HTTPRequestOperationのエラー:(200-299)の予期されるステータスコード、400を取得しました")を受け取った場合は、実際にここでもresponseObjectを読み取ります(これがAPIの方法です)私が使用しているのは、私が引き起こしたエラーのクラスを教えてくれます)。

AFJSONRequestOperationを使用してそれを行うことができます:

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSLog(@"my return is: %@", [JSON valueForKeyPath:@"Result"]);

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"exception code: %@", [JSON valueForKeyPath:@"ExceptionCode"]);
    NSLog(@"exception message: %@", [JSON valueForKeyPath:@"ExceptionMessage"]);
}];
[operation start];

AFHTTPClientを使用してどのように(そして私はできますか?)それを行うことができますか?

4

2 に答える 2

1

変数には、operation必要なものがすべて含まれています。

[[BMNetworkCalls sharedInstance] postPath:theURL parameters:theDict success:^(AFHTTPRequestOperation *operation, id responseObject) {
  // ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    if ([operation isKindOfClass:[AFJSONRequestOperation class]]) {
      id JSON = [(AFJSONRequestOperation *)operation responseJSON];
      NSLog(@"JSON: %@", JSON)
    }
}];
于 2012-06-09T13:43:34.410 に答える
-1

すべてのクレジットは@phix23に送られ、彼は私を正しい方向に向けました。

サブクラス化されたAFHTTPClientで作成したカスタムメソッドを次に示します。これにより、400エラーを受け取った後にJSON応答を確認できます。

- (void) myPostPath:(NSString *)path
        parameters:(NSDictionary *)parameters
           success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, id JSON))success 
           failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON))failure
{
    NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:parameters];   
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:success failure:failure];
    [self enqueueHTTPRequestOperation:operation];
}

私はそれを次のように呼んでいます:

[[BMNetworkCalls sharedInstance] myPostPath:theURL parameters:theDict success:^(NSURLRequest *request, NSHTTPURLResponse *response, id responseObject) {
    NSLog(@"my return is: %@", [responseObject valueForKeyPath:@"Result"]);

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {          
    NSLog(@"exception code: %@", [JSON valueForKeyPath:@"ExceptionCode"]);
}];
于 2012-06-08T00:00:08.500 に答える