如何使用 RestKit 指定关系?

Posted

技术标签:

【中文标题】如何使用 RestKit 指定关系?【英文标题】:How to specify relationships using RestKit? 【发布时间】:2013-03-02 18:14:38 【问题描述】:

我正在尝试使用 RestKit 将一些 JSON 映射到我的核心数据实体。

我有一个 Case 实体,该实体具有 caseId 属性,并且与名为 bindersBinder 实体具有可选的一对多关系。 Binder 实体与 Case 具有反向的一对一关系,称为 case,这不是可选的。

我可以成功映射 Case 实体,但在映射 Binder 实体时遇到问题。

我的映射设置如下:

RKEntityMapping *caseEntityMapping = [RKEntityMapping mappingForEntityForName:@"Case" inManagedObjectStore:managedObjectStore];
[caseEntityMapping addAttributeMappingsFromArray:[@"caseId"]];

RKEntityMapping *binderEntityMapping = [RKEntityMapping mappingForEntityForName:@"Binder" inManagedObjectStore:managedObjectStore];


NSString *pathPattern = @"rest/case/list";

[router.routeSet addRoute:[RKRoute routeWithName:@"getCases" pathPattern:pathPattern method:RKRequestMethodGET]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:caseEntityMapping pathPattern:pathPattern keyPath:@"data" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[_objectManager addResponseDescriptor:responseDescriptor];


pathPattern = @"rest/binder/list/:caseId";

[router.routeSet addRoute:[RKRoute routeWithRelationshipName:@"binders" objectClass:[PFCase class] pathPattern:pathPattern method:RKRequestMethodGET]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:binderEntityMapping pathPattern:pathPattern keyPath:@"data" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[_objectManager addResponseDescriptor:responseDescriptor];

我使用[_objectManager getObjectsAtPathForRouteNamed:@"getCases" object:nil parameters:nil success:… failure:…] 获取案例,然后在成功块中,我通过执行使用[_objectManager requestWithPathForRelationship:@"binders" ofObject:mappedCase method:RKRequestMethodGET parameters:nil] 创建的请求操作来获取每个案例的活页夹。

但是没有活页夹的映射结果。我错过了什么吗?

【问题讨论】:

【参考方案1】:

我必须将外键 RKConnectionDescription 添加到活页夹实体映射中,这需要我为 Binder 实体创建一个名为 caseId 的新属性。

有什么方法可以做到这一点而不必创建新属性?另外,什么时候需要 RKConnectionDescription 的关键路径是什么?

【讨论】:

以上是关于如何使用 RestKit 指定关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RestKit 序列化多态对多核心数据关系?

Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON

如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?

如何使用 RestKit 加载多个不相关的对象?

RestKit 将未嵌套关系映射到拥有对象

如何使用 RestKit 正确测试映射(嵌套映射,对多)