restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)

Posted

技术标签:

【中文标题】restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)【英文标题】:restkit mapping nested array is empty (nested restkit request with json response) 【发布时间】:2014-11-09 23:52:15 【问题描述】:

我在这里做了什么奇怪的事情吗?

我的类别被下载和映射,

产品也会按照日志记录的方式被下载和映射,

但我的产品在每个类别下都是空的, 谢谢!


  "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;

];

日志显示正在为每个产品映射对象,但我只得到

ProductCategory: 0x7bf53510
ProductCategory: 0x7be57f00

每个数组和 0 个对象

【问题讨论】:

您需要提供更多信息。将description 方法实现添加到ProductCategoryProduct,以便日志告诉您它们包含的内容。打开跟踪日志并提供一些详细信息。展示您如何测试数组是否为空,并展示准确的 JSON,它会产生您描述的 2 个ProductCategory 实例的结果。 【参考方案1】:

假设您的 ProductCategory 类有

NSArray *Product
NSString * tit

创建一个***的 RKObjectMapping 类,

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

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

并创建应该具有的新类 ProductCategoryResponse

NSArray * productsCategories

使用 ProductCategoryResponseMapping 作为响应描述符。

现在您的响应将包含 productsCategories 数组,每个都有 Products 数组和 String tit。

【讨论】:

谢谢你的回答 Fahad,我按照你的建议做了,它可以工作,但对象仍然是空的 :( 这不是必需的,因为响应描述符的关键路径在 JSON 中超过了这个级别。 这是我的 json 输入字符串的整数类型转换问题,它编辑它,thnx 反正!

以上是关于restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:将嵌套数组映射到对象

RestKit .22:无法成功映射与嵌套 JSON 的关系

Restkit 0.20 嵌套对象数组映射问题

RestKit 0.20:映射复杂的动态嵌套 JSON

RestKit EntityMapping 与嵌套数组

在其 HTTP 正文中嵌套 JSON 的 RestKit 对象映射请求