RestKit 关系问题

Posted

技术标签:

【中文标题】RestKit 关系问题【英文标题】:RestKit issue with relationships 【发布时间】:2014-10-02 22:53:34 【问题描述】:

我将 RestKit 与 Core Data 结合使用,但在映射实体之间的关系时遇到了问题。问题是我有 3 个不同的 json(用于 3 个不同的屏幕)并且这些 json 具有相互关联的数据。我的 3 个实体是 Post、Conversation 和 Message。关系是这样的:每个帖子都有很多对话(对多关系),每个对话有很多消息(对多关系)。

这是帖子数组的第一个 json:

"success":true,"result":
["totalUsers":1,"lastMessageDate":1411612821000,"id":874,"title":"My post title",
"totalUsers":3,"lastMessageDate":1411536669000,"id":539,"title":"Message me"]

这是第二个 json,它是特定帖子的对话数组:

"success":true,"result":
["badgeSize":1,"lastMessage":
"id":1725,"text":"hey","datePublished":141153372347,"id":208,"username":"energydrink"]

这是特定对话的第三个 json:

"success":true,"result":
"spamStatus":false,"messages":
["id":416,"text":"hello","datePublished":1403432789000,
"id":380,"text":"whats up","datePublished":1403432144221]

如您所见,关系数据被分成 3 个 json。这是我目前在 RestKit 中配置关系和响应描述符的方式:

[conversationMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"messages" toKeyPath:@"messages" withMapping:messageMapping]];

[postMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"conversations" toKeyPath:@"conversations" withMapping:messageMapping]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:postMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"result" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

由于响应描述符是使用 postMapping 映射的,因此我无法正确映射第二个和第三个 json 的数据,然后使用我的配置存储在 Core Data 中。非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

我想通了。基本上,我对第一个 json 使用了 RestKit 的映射。在第一个视图控制器上调用 tableView:didSelectRowAtIndexPath: 时,我将 post 对象传递给第二个视图控制器。对于第二个 json 响应,我反序列化数据并将对话添加到该帖子对象。然后,我简单地打电话给[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext saveToPersistentStore:&error];。现在它工作得很好。

【讨论】:

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

restkit - 映射关系有问题......或其他东西

RestKit 嵌套关系

RestKit、核心数据和关系问题。父对象不识别子集

Restkit:嵌套关系映射

RestKit 一对多关系逆映射

Restkit:外键关系的存根