RestKit对象映射:如何从键值映射到新对象/关系?

时间:2013-11-06 00:33:47

标签: ios json core-data restkit restkit-0.20

不确定标题是否描述最佳问题,如果您有更好的描述,请编辑标题。

所以我正在实施一个处理产品订单的应用程序。在每个订单中,都有“行项目”,即每个产品的订单信息。我们从REST API调用获得的“行项目”的JSON数据如下所示:

JSON数据:

"line_item":{
   "id":1234, // Product ID
   "name":"Cliff Bar",
   "sold_price":12.00,
   "sold_quantity":25
}

CoreData对象(采用JSON格式):

"line_item"{
   "product":{
     "id":1234,
     "name":"Cliff Bar",
     "description":"Awesome food",
     "inventory_level":12,
     "standard_price":11.00
   },
    "sold_price":12.00,
    "sold_quantity":25
}

正如您所看到的,“id”和“name”更像是所售产品的“标识符”,如果您愿意,则更像“主键”。 (CoreData没有主键的概念,RestKit类似)当我从其余的API获取JSON信息时,它实际上“折叠”了line_item对象内的产品对象以解决性能问题。

问题1:我该如何处理?

如果产品不存在,是否使用“id”和“name”以外的键值创建新的产品对象?然后,如果需要,我将获取完整的产品对象。这是一个好方法吗?

如果我不创建这些不完整的对象,只需保持CoreData对象的定义与JSON对象相同。我担心CoreData中的对象之间没有很强的关系。

建议一个更好的解决方案,如果你有一个!

问题2:

如果对问题1的回答是肯定的,我如何将2个键值(“name”和“id”)映射到一个新创建的对象的字段(“id”和“product”的“name”的内部“ LINE_ITEM“)?我在任何教程中都没有找到任何相关信息。

喜欢听听你如何处理这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我真的不明白你的问题。但是对于你的json,如果我是你,我会像这样创建我的核心数据:

  1. LINE_ITEM:
    • 属性:
      • sold_price
      • sold_quantity
    • 关系:
      • 产品
  2. 产品
    • 属性:
      • ID
      • 名称
      • 描述
      • INVENTORY_LEVEL
      • standard_price
    • 关系:
  3. 然后我依赖于此创建RestKit映射。

    RKManagedObjectStore *mos = [RKObjectManager sharedManager].managedObjectStore;
    RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Line_item" inManagedObjectStore:mos];
    mapping.identificationAttributes = @[@"id"];
    [mapping addAttributeMappingsFromArray:@[@"sold_quantity", @"sold_price"]];
    
    [mapping addRelationshipMappingWithSourceKeyPath:@"product" mapping:[Product manageObjectMappingDefinition]];
    

    哦,我意识到我的代码和结构与你的json不兼容。

    以下是您如何识别line_item的问题?没有它,我无法设置identificationAttributes