RestKit 直接 + 反向关系映射

Posted

技术标签:

【中文标题】RestKit 直接 + 反向关系映射【英文标题】:RestKit direct + inverse relationship mapping 【发布时间】:2014-08-26 09:38:12 【问题描述】:

作为一名新手 RestKit 用户,我对 CoreData 关系映射的概念理解存在问题。

假设我们有一个 CoreData 模型,其中只有两个处于主/从关系中的实体:

@interface Master : NSManagedObject
@property (nonatomic, retain) NSString *objectId;
@property (nonatomic, retain) NSString *display;
@property (nonatomic, retain) NSSet *childrens;
@end

@interface Children : NSManagedObject
@property (nonatomic, retain) NSString *objectId;
@property (nonatomic, retain) NSString *display;
@property (nonatomic, retain) Master *father;
@end

这个模型的 RestKit 映射是:

RKEntityMapping *masterMapping = ...
RKEntityMapping *childrenMapping = ...

... property mappings ...

masterMapping.identificationAttributes = @[ @"objectId" ];
childrenMapping.identificationAttributes = @[ @"objectId" ];

[masterMapping addPropertyMapping:[RKRelationshipMapping  
  relationshipMappingFromKeyPath:@"childrens" toKeyPath:@"childrens"
  withMapping:childrensMapping]];

[childrenMapping addPropertyMapping:[RKRelationshipMapping  
  relationshipMappingFromKeyPath:@"father" toKeyPath:@"father"
  withMapping:masterMapping]];

这是 http get 响应的建模方式(我可以更改它):


 objectId: "3",
 display: "a master object",
 childrens: [
   
     objectId: "1",
     display: "a child object",
     father:  objectId: "3" 
   ,
   
     objectId: "2",
     display: "another child object",
     father:  objectId: "3" 
   
 ]

问题是之前的映射定义在将它与某个 RKResponseDescriptor 关联时会导致来自 RestKit 的循环映射错误。

我已阅读 RestKit 文档和许多 ***.com 类似的线程,但我仍然不明白如何设置 完整 CoreData 模型关系映射,前提是我需要同时拥有这两种关系在我的代码中可用(即,我需要从孩子显式访问父亲,从主实体访问孩子)。

我们将不胜感激。

提前非常感谢!

【问题讨论】:

【参考方案1】:

我自己解决了我的映射理解问题,我想分享一下以防万一:RestKit 模型映射并不是要以“绝对”术语在模型上定义,而是“相对”到模型上的 RESTful 操作。

换句话说,一个模型实体可以有多个 RestKit 映射,每个映射对应于该实体在 GET/POST/PATCH/etc 中的引用方式。操作。

我希望这可以帮助其他人更好地理解RestKit漂亮的框架!

【讨论】:

你好,我和你有同样的问题,但我不太明白你的回答。你能分享一下你用来实现反向关系映射的代码吗?

以上是关于RestKit 直接 + 反向关系映射的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RestKit 指定关系?

关系映射中的Restkit映射keyPath

RestKit 添加属性映射和关系映射

RestKit 一对多关系逆映射

Restkit:来自 JSON parentId 的映射关系

RestKit – 使用关系映射将单个源映射到多个目的地