如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?
Posted
技术标签:
【中文标题】如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?【英文标题】:How to define relationships mapping between entities that are not in the same JSON document in RestKit? 【发布时间】:2013-06-20 07:55:39 【问题描述】:使用 RestKit 0.20.2
示例: 我设置了 2 个核心数据实体 'Album' 和 'Song' 以及关系来定义一张专辑有几首歌曲,而一首歌曲属于一个专辑。
我做了实体映射,我可以成功显示专辑列表。
我打电话:
/albums
获取相册
/albums/:albumId/songs
获取albumId
指定专辑的歌曲
我从来没有一个 JSON 文档同时保存一张专辑及其歌曲。 (github 上提供的所有 RestKit 示例都假定您处理将所有实体放在一起的单个 JSON 文档)
如何设置两个实体之间的关系以使 RestKit 在我的 Core Data 对象存储中正确写入?
【问题讨论】:
您向服务器发出的获取专辑歌曲的请求应该在 URL 路径中包含专辑标识 - 是吗? 确实如此。我将问题编辑得更清楚 【参考方案1】:您需要使用RKObjectManager
和路由。
在配置您的映射时,包含从路由 URL 中提取 albumId
并将其存储到歌曲的临时属性中的项目:
@"@metadata.routing.parameters.albumId": @"connectionAlbumId",
然后,您可以添加关系映射以将歌曲连接到相应的专辑:
[songMapping addConnectionForRelationship:@"album" connectedBy:@ @"connectionAlbumId": @"identity" ];
其中@"identity"
是保存专辑管理对象上标识的属性的名称。
【讨论】:
我不应该在专辑映射中添加一些东西吗? 和那个临时属性,我不应该让它持久化吗?因为我需要它来过滤获取请求块中的歌曲实体... 如果你想将它用于其他事情,你可以让它持久化。这种关系应该是双向的,因此只有在一端完成它也会自动完成另一端(Core Data 自己完成)。 谢谢你,在搜索文档数小时后帮助了我很多!以上是关于如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?的主要内容,如果未能解决你的问题,请参考以下文章
Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON