Search code examples
iosrestkit

How to Get Object based response in Restkit 0.20.3


Hi have used restkit in my several previous projects with version 0.10.0. But now i am going to move with new restkit v0.20.3.

I followed all the steps from upgrading 10.0 to 20.0 from HERE.

I am able execute my request and response also came under success blog. But i can get the property of my response object. That is very shocking for now. I can get value only by [data valueForKey:@""] which is not good i guess in restkit.

Can any one tell me about how we get value from object's property.

[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        NSLog(@"%lu", (unsigned long)mappingResult.array.count);
        DataForResponse *data = [mappingResult.array objectAtIndex:0];
        User *user = [data valueForKey:@"user"];

        User *user = [[data.user allObjects] firstObject];
        NSLog(@"%@",[user valueForKey:@"email"]);
        RKLogInfo(@"Load collection of Users: %@", mappingResult.array);
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"%@",operation.HTTPRequestOperation.responseString);
        RKLogError(@"Operation failed with error: %@", error);
    }];

My goal is to get value of email like from user.email


Solution

  • After searching & based on my restkit knowledge below code is worked.

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[DataForResponse objectMappingForDataResponse:LOGIN] method:RKRequestMethodPOST pathPattern:nil keyPath:@"data" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
        [rkomForLogin addResponseDescriptor:responseDescriptor];
        RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
        operation.targetObject =  data;
    
        [rkomForLogin postObject:nil path:@"login" parameters:dict success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
            // Handled with articleDescriptor
            NSLog(@"%@",operation.HTTPRequestOperation.responseString);
            DataForResponse *data  = [mappingResult.array objectAtIndex:0];
            User *user  = [[data.user allObjects] firstObject];
            NSLog(@"%@",[user email]);
            NSLog(@"%ld",operation.HTTPRequestOperation.response.statusCode);
        } failure:^(RKObjectRequestOperation *operation, NSError *error) {
            // Transport error or server error handled by errorDescriptor
            NSLog(@"%@",operation.HTTPRequestOperation.responseString);
            RKLogError(@"Operation failed with error: %@", error);
        }];
    

    This is same object based response that i was getting in restkit 0.10 so this is way to execute a request.