0
votes

This is my response from API:

{"is_favorited":1}

I want to map it by RestKit but I can't get it working. This I have in AppDelegate.m:

RKObjectMapping *isFavoriteMapping = [RKObjectMapping mappingForClass:[IsFavorite class]];
[isFavoriteMapping addAttributeMappingsFromDictionary:@{
                                                         @"is_favorited" : @"Is_favorited",
                                                         }];

RKResponseDescriptor *isFavoriteResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:isFavoriteMapping
                                                                                                  method:RKRequestMethodAny
                                                                                             pathPattern:@"/api/isPointFavorited/:sid"
                                                                                                 keyPath:nil
                                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[manager addResponseDescriptor:isFavoriteResponseDescriptor];

Path is okay. I have token in address. I am calling it by:

    RKObjectManager *manager = [RKObjectManager sharedManager];
    [manager getObjectsAtPath: [NSString stringWithFormat:@"/api/isPointFavorited/%@", sid]
                   parameters:@{
                                @"pid":[NSString stringWithFormat:@"%@", actualPlace.Id]
                                }
                      success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
     {
      ...
      }
           failure:^(RKObjectRequestOperation *operation, NSError *error)
              {
              ...
              }];

I am using RestKit several times in app and with sid (login token) too. So there is no problem with address or method call. Problem must be in mapping but I don't know how to do it. I tried to change keyPath from nil to @"is_favorited" but it didn't help.

My Is_favorite.h:

@interface IsFavorite : NSObject

@property(nonatomic) NSNumber *Is_favorited;

@end

RestKit error:

Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No mappable object representations were found at the key paths searched." UserInfo=0x1849cbc0 {DetailedErrors=(
), NSLocalizedFailureReason=The mapping operation was unable to find any nested object representations at the key paths searched: events, results
The representation inputted to the mapper was found to contain nested object representations at the following key paths: is_favorited
This likely indicates that you have misconfigured the key paths for your mappings., NSLocalizedDescription=No mappable object representations were found at the key paths searched., keyPath=null}

Edit - changes in AppDelegate but still not working:

RKObjectMapping *isFavoriteMapping = [RKObjectMapping mappingForClass:[IsFavorite class]];
[isFavoriteMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"Is_favorited"]];

RKResponseDescriptor *isFavoriteResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:isFavoriteMapping
                                                                                                  method:RKRequestMethodAny
                                                                                             pathPattern:@"/api/isPointFavorited/:sid"
                                                                                                 keyPath:@"is_favorited"
                                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[manager addResponseDescriptor:isFavoriteResponseDescriptor];
1

1 Answers

1
votes

Remove you usage of addAttributeMappingsFromDictionary:, and change to:

[isFavoriteMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"Is_favorited"]];

then change the keyPath on the response descriptor to @"is_favorited".

This is known as a nil key path mapping (because of the nil source key path in the mapping).