3

RestKit を使用したセット マッピングを手伝ってください。これを行う方法がわかりません。

私のJSONは

{
"result":{
    "success":"1",
    "message":"You logged in successfully.",
    "data":{
        "user_id":"1",
        "firstname":"somefirstname",
        "lastname":"somelastname",
        "username":"someusername",
        "country_id":"someid",
        "country_name":"somecountry",
        "phone":"1234567890",
        "status":"active"
        }
    }
}

私がこれまでやってきたことは、

RKObjectMapping *loginMapping = [RKObjectMapping mappingForClass:[Login class]];
[loginMapping addAttributeMappingsFromDictionary:@{ @"user_id":@"intUserID", @"firstname":@"strFirstName", @"lastname":@"strLastName"}];        
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:loginMapping
                                                                                            method:RKRequestMethodGET
                                                                                       pathPattern:@"PathTOLogin"
                                                                                          keyPath:@"result.data"
                                                                                      statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
NSURL *baseURL = [NSURL URLWithString:kAPIBaseURLString];
AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
Login *loginObject = [[Login alloc] init];
[objectManager getObject:loginObject path:kUserLogin parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
}];

問題は、JSON応答が次のようになる場合があるようなものです

{
"result":{
    "success":"0",
    "message":"Invalid Username or Password",      
    } 
}

したがって、エラーがスローされます

Error Domain=org.restkit.RestKit.ErrorDomain Code=1001

そのため、モデル クラスに成功/メッセージとして他のすべてのプロパティと共にさらに 2 つのプロパティを追加することを考えましたが、これらのプロパティはルートにあり、その他はキー パス「result.data」にあるため、カスタム マッピングの設定に固執しました。

誰か助けてください。

4

2 に答える 2

0

次の条件を確認することで、最初にデータが存在するかどうかを確認できます

if([yourDictionary valueForKeyPath:@"result.data"]){

   RKObjectMapping *loginMapping = [RKObjectMapping mappingForClass:[Login class]];
[loginMapping addAttributeMappingsFromDictionary:@{ @"user_id":@"intUserID", @"firstname":@"strFirstName", @"lastname":@"strLastName"}];        
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:loginMapping
                                                                                            method:RKRequestMethodGET
                                                                                       pathPattern:@"PathTOLogin"
                                                                                          keyPath:@"result.data"
                                                                                      statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
NSURL *baseURL = [NSURL URLWithString:kAPIBaseURLString];
AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
Login *loginObject = [[Login alloc] init];
[objectManager getObject:loginObject path:kUserLogin parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
}];

}
else{
    NSLog(@"No data available");
}

これがあなたを助けることを願っています。

于 2013-09-19T08:57:04.057 に答える