向 RestKit 映射添加一对一外键连接的问题

Posted

技术标签:

【中文标题】向 RestKit 映射添加一对一外键连接的问题【英文标题】:Issue with adding a one-to-one foreign-key connection to a RestKit mapping 【发布时间】:2013-05-20 14:27:52 【问题描述】:

我正在尝试添加到 RestKit 映射的连接,但没有成功。

我的 JSON 如下:


  parent: 
    token: "token"
    title: "title",
    description: "description",
    child_id: 1
  

我的 CoreData 方案定义 Parent ManagedObject 在 child 键下有一个 Child 关系(反之亦然)。 Parent 映射发生在我已经在 CoreData 中拥有相应的 Child 对象之后,所以这不是问题。

为了解决这个问题,我关注了网络上的一些链接和讨论,但没有任何效果。这样做的正确方法是什么,而不必将 child_id 属性添加到 Parent (有些人声称他们这样做了,但在我看来这是错误的)。

假设我有这个映射:

- (RKEntityMapping *)parentResponseMapping 
    RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Parent" inManagedObjectStore:[self myStore]];
    [mapping addAttributeMappingsFromArray:@[@"title", @"description"]];
    mapping.identificationAttributes = @[@"token"];
    return mapping;

起初我尝试像这样添加连接:

NSEntityDescription *parentEntity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:[self myContext]];
NSRelationshipDescription *childRelationship = [parentEntity relationshipsByName][@"seller"];
RKConnectionDescription *connection = [[RKConnectionDescription alloc] initWithRelationship:childRelationship keyPath:@"child_id"];

[mapping addConnection:connection];

但是我得到一个错误,child_id 不是一个有效的属性(这是我尝试将child_id 属性添加到我的方案的地方,但同样,这对我来说似乎很乱,此外,它没有工作) .

我还尝试通过以下方式添加连接:

[addConnectionForRelationship:@"child" connectedBy:@"child_id"]

但这也没有用。

这两种方法都忽略子映射。

正确的方法是什么?

编辑:RestKit Object Mapping relationships with foreign keys - 这里已经回答了,但解决方案对我来说看起来很奇怪。这是唯一的方法吗?

【问题讨论】:

【参考方案1】:

无需向 Parent 添加 child_id 属性(有些人声称他们这样做了,但在我看来这是错误的)。

这实际上是正确的方法......

关键是 RestKit 需要某种方式将这两个项目映射在一起,一些用于搜索和查找要连接的项目的键。此信息只需要是暂时的(假设您一次性加载数据或标识的另一侧是持久属性)。真的没有其他方法可以做到这一点。

【讨论】:

就我而言,我在不同的请求中加载数据。我希望 RestKit 在获取正确的 ManagedObject 模型时临时保存 id 属性,然后将其删除 - 无需映射 id 属性。

以上是关于向 RestKit 映射添加一对一外键连接的问题的主要内容,如果未能解决你的问题,请参考以下文章

Restkit:当外键设置为 null 时,Core Data 中的关系不会重置

RestKit 对象映射与外键和服务

RestKit嵌套的一对多关系映射很慢

RestKit 一对多关系逆映射

Restkit:当外键引用Core Data中缺少的本地对象时获取远程链接对象

MyBatis的对象关系映射---一对多等值连接策略★★★★★