mamadoo
mamadoo

Reputation: 43

restkit mapping nested array is empty (nested restkit request with json response)

Am i doing something weired here ?

my categories get downloaded and mapped,

product also get downloaded and mapped as logging is saying,

but my products are empty under each category, thnx!

{
  "productsCategories" : [
    {
      "product" : [
        {
          "price" : 3.99,
          "title" : "Product A"
        },
        {
          "price" : 3.99,
          "title" : "ProductB "
        }
      ],
      "categoryTitle" : “a category“
    }
  ]
}




RKObjectMapping *productCategoryMapping = [RKObjectMapping mappingForClass:[ProductCategory class]];
[productCategoryMapping addAttributeMappingsFromDictionary:@{
                                                             @"categoryTitle": @"tit"
                                                             }];

RKObjectMapping* productMapping = [RKObjectMapping mappingForClass:[Product class] ];
[productMapping addAttributeMappingsFromDictionary:@{
                                                     @"title": @"tit",
                                                     @"price": @"prc"
                                                       }];
[productCategoryMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"product"
                                                                                       toKeyPath:@"product"
                                                                                     withMapping:productMapping]];


RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:productCategoryMapping method:RKRequestMethodPOST pathPattern:@"productByCategory" keyPath:@"productsCategories" statusCodes:[NSIndexSet indexSetWithIndex:200]];

NSURL *url=[NSURL URLWithString:@"http://www.example.com/REST/v2/"];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:url];
[manager addResponseDescriptor:responseDescriptor];

NSMutableDictionary *mutableParameters = [NSMutableDictionary dictionary];
[mutableParameters setValue:@"1" forKey:@"id"];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:productCategoryMapping method:RKRequestMethodPOST pathPattern:@"productByCategory" keyPath:@"productsCategories" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

[manager postObject:request path:@"productByCategory" parameters:mutableParameters success:^(RKObjectRequestOperation *operation, RKMappingResult *result){

    self.productCategoryArr=result.array;
    [self.tblDetails reloadData];

}failure:^(RKObjectRequestOperation *operation, NSError *error) {

    RKLogError(@"Operation failed with error: %@", error);
    self.productCategoryArr=nil;

}];

the logging says objects are being mapped for each products but I only get

ProductCategory: 0x7bf53510
ProductCategory: 0x7be57f00

arrays and 0 objects in each

Upvotes: 1

Views: 398

Answers (1)

Fahad
Fahad

Reputation: 17

Assuming your ProductCategory class has

NSArray *Product
NSString * tit

Create a top level RKObjectMapping like,

RKObjectMapping * ProductCategoryResponseMapping = [RKObjectMapping mappingForClass:  [ProductCategoryResponse class]];

[ProductCategoryResponseMapping addAttributeMappingsFromDictionary:@{
                                                         @"productsCategories": @"productsCategories"
                                                         }];

And create new class ProductCategoryResponse which should have

NSArray * productsCategories

Use ProductCategoryResponseMapping for Response descriptor.

Now your response will have array of productsCategories, each having array of Products and String tit.

Upvotes: 1

Related Questions