Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)

Posted

技术标签:

【中文标题】Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)【英文标题】:Restkit/Core Data relationship mappings, entity to same type of entity (parent/child) 【发布时间】:2013-07-09 19:15:13 【问题描述】:

我正在关注 RestKit 0.2.0 上的 Alexander Edge tutorial,但我对如何将其应用于我的需求感到困惑。具体来说,我正在使用一个 Web 服务,它返回以下结构的对象:


    "ObjectIdMember": 200,
    "ObjectNameMember": "Baseball Bat",
    "SubObjectIdMember": 4124
,

    "ObjectIdMember": 200,
    "ObjectNameMember": "Baseball Glove",
    "SubObjectIdMember": 4555
,

这个想法是Object 实体可以有许多子对象。粗略地说,获取Object 的目的是使用DisplayName 来填充表格视图中的节标题,并按对象对节中的子对象进行分组。

如何使用 RestKit + Core Data 捕获(或定义)这种关系?本教程仅建议在响应中定义了子对象时您可能会做什么,但这是另一种情况。

我知道我可以使用 -(NSArray *)getSubObjects 来装饰和使用 Object 的子类,但 Core Data 不会知道我在做什么,因为这不会使用任何关系。

【问题讨论】:

您可以将对象映射为单个项目,然后使用谓词从商店中获取以仅获取适当的成员和子对象吗? 【参考方案1】:

我相信你想要的是RKConnectionDescription,它可以使用外键在Core Data中建立关系。

文档中的示例给出了以下 json:

 "project": 
     "id": 12345, 
      "name": "My Project",
      "userID": 1
    

使用以下映射配置:

NSEntityDescription *projectEntity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:managedObjectContext];
NSRelationshipDescription *userRelationship = [projectEntity relationshipsByName][@"user"];
RKConnectionDescription *connection = [[RKConnectionDescription alloc] initWithRelationship:userRelationship attributes:@ @"userID": @"userID" ];

【讨论】:

是的,这就是我想要的。我认为我需要阅读更多有关 Core Data 的内容,才能真正了解它在做什么。

以上是关于Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)的主要内容,如果未能解决你的问题,请参考以下文章

RestKit Core Data 一对多映射

Restkit Core Data 映射崩溃应用程序

两个端点结果之间的外键映射 RESTKIT Core Data

RestKit / Core Data / Offline - 我需要 UUID 还是 RestKit 足够聪明?

RESTkit,Core Data:在将对象传输到 Core Data 之前对其进行处理

如何将 PUT 请求添加到 RestKit + Core Data?