1

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

所以我正在实现一个处理产品订单的应用程序。在每个订单中,都有“订单项”,即每个产品的订单信息。我们从 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”null 以外的键值的新产品对象?然后,如果需要,我将获取完整的产品对象。这是一个好方法吗?

如果我不创建这些不完整的对象,而只是将 CoreData 对象定义为与 JSON 对象相同。恐怕CoreData中的对象之间没有很强的关系。

如果你有一个更好的解决方案,请提出一个更好的解决方案!

问题2:

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

很想听听您将如何解决这个问题。谢谢!

4

1 回答 1

0

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

  1. 行项目:
    • 属性:
      • 出售价格
      • 售出数量
    • 关系:
      • 产品
  2. 产品
    • 属性:
      • ID
      • 姓名
      • 描述
      • 库存级别
      • 标准价格
    • 关系:
      • 项目

然后我创建 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.

于 2013-11-06T13:28:12.757 回答