Mappage des parameters de confusion dans RKObjectMapping – Rest

S'il vous plaît aider dans le mapping de set avec RestKit, je suis perdu pour find comment faire cela.

Mon JSON est comme

{ "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" } } } 

Ce que j'ai fait jusqu'ici est

 RKObjectMapping *loginMapping = [RKObjectMapping mappingForClass:[Login class]]; [loginMapping addAtsortingbuteMappingsFromDictionary:@{ @"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 URLWithSsortingng:kAPIBaseURLSsortingng]; 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) { }]; 

Les problèmes sont comme parfois la réponse de JSON peut être comme

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

Donc ça jette une erreur

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

J'ai donc pensé à append 2 propriétés supplémentaires dans la class Model comme succès / message avec toutes les autres propriétés mais je suis resté sur le paramétrage du mappage personnalisé car ces propriétés sont sur root et autres dans le path key "result.data".

Quelqu'un peut-il m'aider s'il vous plaît.

Vous devriez changer votre mappage de connection à quelque chose comme:

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

Fondamentalement, supprimez 'data' du path key du descripteur de réponse et utilisez-le à la place dans les paths de key de mappage.

vous pouvez d'abord vérifier si datatables existent ou non en vérifiant la condition suivante

 if([yourDictionary valueForKeyPath:@"result.data"]){ RKObjectMapping *loginMapping = [RKObjectMapping mappingForClass:[Login class]]; [loginMapping addAtsortingbuteMappingsFromDictionary:@{ @"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 URLWithSsortingng:kAPIBaseURLSsortingng]; 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"); } 

J'espère que ceci vous aidera.