Question

Below is the JSON response that I get back:

{
    "notificationId": 121,
    "activities": [
    143, 
    149]
}

Below is the mapping:

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
    [mapping addAttributeMappingsFromDictionary:@{@"notificationId" : @"notificationId",
                                                  @"activities": @"activities"}];

 RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping
                                                                                            method:RKRequestMethodGET
                                                                                       pathPattern:nil
                                                                                           keyPath:@""
                                                                                       statusCodes:statusCodeSet];


[self.objectManager postObject:invitation path:@"/notifications" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

    NSString *notificationId1 = [mappingResult.dictionary valueForKey:@"notificationId"];
    NSArray *activitesArray1 = [mappingResult.dictionary valueForKey:@"activities"];

    NSString *notificationId2 = [mappingResult.dictionary objectForKey:@"notificationId"];
    NSArray *activitesArray2 = [mappingResult.dictionary objectForKey:@"activities"];

    NSLog(@"notificaiton ID %@", notificationId1);
    NSLog(@"Activites %@", activitesArray1);

    NSLog(@"notification ID %@", notificationId2);
    NSLog(@"Activites %@", activitesArray2);

    NSLog(@"Activites Array %@", activitesArray);


    NSLog(@"mappingResult Dictionary %@", mappingResult.dictionary);


} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Failusre");
}];

}

Log:

2014-04-21 19:17:51.273 App[57446:4403] I restkit.network:RKObjectRequestOperation.m:250 POST 'http://www.domain.com/notifications' (200 OK / 1 objects) [request=0.2371s mapping=0.0035s total=0.2446s]
2014-04-21 19:17:51.274 App[57446:60b] notification ID (null)
2014-04-21 19:17:51.274 App[57446:60b] Activites (null)
2014-04-21 19:17:51.274 App[57446:60b] notification ID (null)
2014-04-21 19:17:51.274 App[57446:60b] Activites (null)
2014-04-21 19:17:51.274 App[57446:60b] Activites Array (
)
2014-04-21 19:17:51.275 App[57446:60b] mappingResult Dictionary {
    "" =     {
        activities =         (
            143,
            149
        );
        notificationId = 121;
    };
}

Why are all the values Null? How can I get the values of notificationId back as an NSString and activitiesin an array ? Can this be done without creating a mapping class?

Was it helpful?

Solution

Because your response descriptor is wrong. It should be:

[RKResponseDescriptor responseDescriptorWithMapping:mapping
                                             method:RKRequestMethodPOST
                                        pathPattern:@"/notifications"
                                            keyPath:nil
                                        statusCodes:statusCodeSet];

so that it matches the request you're sending (a POST, not a GET is the main issue).

OTHER TIPS

For some unknow reason, it looks like, there is a wrapper object in the dictionary, that has key value @"" so first extract that and then everything else. Activities itself do look like array, so simply:

NSArray *activities = [[mappingResult.dictionary objectForKey:@""] objectForKey:@"activities"];

However that notification looks tricky, because it probably is a number. So if it is a consistent type, use:

NSNumber *notificationID = [[mappingResult.dictionary objectForKey:@""] objectForKey:@"notificationId"];
NSSring *notificationIDString = [notificationID stringValue];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top