2

私は現在、RKErrorMessageクラスを使用して、次のようにサーバーからのエラーメッセージをマップしています。

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"message" toKeyPath:@"errorMessage"]];
RKResponseDescriptor *errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                            pathPattern:nil
                                                                                                keyPath:@"error"
                                                                                            statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

しかし、今度は、サーバーから追加のパラメーター、たとえばエラータイトル(またはその他の問題)をマップしたいと思います。私のJSONは次のようになります:

{
    "error":{
        "title":"This is the error title"
        "message":"This is the error message",
    }
}

アプリがサーバーにアクセスしているときに問題が発生した場合に、これらのエラーメッセージの一部をUIAlertViewsに直接マップできるという考え方です。これはエラーメッセージだけですでに実行できますが、タイトルを追加するとUIAlertViewにうまく適合するようです。

RKErrorMessageクラスを見ると、errorMessageとuserInfoの2つのパラメーターしかないことがわかります。どうすればこれを行うことができますか?

更新: RKErrorMessageでこれを実行しようとしている理由は、RestKitのget / post / put/etcメソッドの失敗ブロックに渡されたNSErrorに自動的にマップされるためです...これは非常に便利です。

[objectManager getObjectsAtPath:@"/api/somethingsomething/" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {

    }];
4

2 に答える 2

3

最初に質問したことを行う方法は次のとおりです(実際には質問に答えなかった答えを受け入れた理由がわかりません)。

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"userInfo"]];
RKResponseDescriptor *errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                            pathPattern:nil
                                                                                                keyPath:@"error"
                                                                                            statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

サンプルコードとの主な違いは次の行です。

[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"userInfo"]];

次に、失敗ブロックのコールバックから、次のようにuserInfoディクショナリにアクセスできます。

NSString *message = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"message"];
NSString *title = [[[[[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey] objectAtIndex:0] userInfo] objectForKey:@"title"];

RestKitは、JSONの「エラー」ディクショナリのすべての属性をRKErrorMessageのuserInfoディクショナリに自動的にマップします。

于 2014-05-27T15:26:53.977 に答える
0

なんで使ってるのRKErrorMessage

RKErrorMessageは、クライアントアプリケーションが通信しているリモートバックエンドシステムによって返されるエラーメッセージを表すために使用される単純なクラスです。

最良の方法は、パラメータをマップするカスタムオブジェクトを作成することだと思います。

@interface MyCustomErrorObject : NSObject

    @property (nonatomic, strong) NSString *title;
    @property (nonatomic, strong) NSString *message;

@end
于 2013-02-28T16:24:12.010 に答える