0

RestKit 0.20 と iOS 7 を使用しています。

REST API からのエラー応答をマッピングしたい。それはどのように見えるかです:

{
  "error": {
    "error_code": 5,
    "error_msg": "User authorization failed: invalid access_token.",
    "request_params": [
      {
        "key": "oauth",
        "value": "1"
      },
      {
        "key": "method",
        "value": "execute.MusicNews"
      },
      {
        "key": "access_token",
        "value": "e2276858338752ef3f6f974b0996e4a1755a5b17178781a6602be1e6c2aa0e23bfb89ec040c787d2dc753"
      }
    ]
  }
}

問題は、API が code でエラーを返すことです200

RKObjectMappingブロックでこのレスポンスとRKResponseDescriptorチェックレスポンスクラスを作成するのは問題ありませんがsuccess、ステータスコードが「エラー」のキーパスから始まるレスポンスをエラーとして処理し、ブロック200を呼び出すように RESTKit に通知するにはどうすればよいfailureですか?

4

1 に答える 1

2

私の解決策は小さなハックです:

次のようなサブクラスを作成しました。

@interface NutHTTPRequestOperation : RKHTTPRequestOperation

@end

@implementation NutHTTPRequestOperation
- (NSError *)error
{
    NSError * error = nil;
    //It seems only call to responseJSON could make AFJSONRequestOperation process error
    id object = [self.responseString objectFromJSONString];

    if ([object isKindOfClass:[NSDictionary class]]) {
        NSNumber * ret = [object objectForKey:@"ret"];
        if (!ret || 0 != ret.integerValue) {
            NSString * desc = [object objectForKey:@"error"];
            error = [NSError errorWithDomain:kNutResponseErrorDomain code:ret.integerValue userInfo:@{NSLocalizedDescriptionKey: desc}];
        }
    }

    if(!error){
        //Get super error , if none, proceed self error
        NSError * error = [super error];
        if (error) {
            return error;
        }
        error = [NSError errorWithDomain:kNutResponseErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"not json dictionary"}];
    }
    return error;
}
于 2013-11-09T05:18:07.653 に答える