2
votes

Is there a way to define 2 or more response descriptors all having the same pathPattern? My assumption was that they would match not only based on the pathPattern, but also on the method. But apparently that isn't the case.

Here is my object mapping:

RKObjectMapping *commentMapping = [RKObjectMapping mappingForClass:[Comment class]];
[commentMapping addAttributeMappingsFromArray:@[@"comment", @"rating", @"views", @"venue", @"user_views"]];

When I do a GET request, I get a list similar to this:

{
    'meta': {
        'total_objects': 2,
        'limit': 20,
        ...
    },
    'objects': [
         {
             'comment': '...',
             'rating': 3.5,
             ...
         },
         ...
    ]
}

And when I do a POST request to create a new object, I just get back something like this:

{
    'comment': '...',
    'rating': 3.5,
    ...
}

So what I want to do is define two different responseDescriptors -- one for each request method. So this is what I did:

[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:commentMapping
                                                                                  method:RKRequestMethodGET
                                                                             pathPattern:@"comment/"
                                                                                 keyPath:@"objects"
                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:commentMapping
                                                                                  method:RKRequestMethodPOST
                                                                             pathPattern:@"comment/"
                                                                                 keyPath:nil
                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

The problem is, the second one (the one with a nil keyPath) is always used. Even for GET requests. Which really messes things up.

What am I doing wrong? Or is there even any way to do what I want here?

1
Hi, I get the same situation as yours. Have you figured out how to fix that? - Johnson

1 Answers

0
votes

The RKObjectManager has a method called *addResponseDescriptorsFromArray:(NSArray ). You will need to add both of your response descriptors to an NSArray and then pass the NSArray to this method.

You can find more information on the method here http://restkit.org/api/latest/Classes/RKObjectManager.html#//api/name/addRequestDescriptorsFromArray: