RestKit - 通过嵌套外键实现核心数据多对多关系

时间:2014-04-30 04:07:56

标签: ios core-data mapping restkit foreign-key-relationship

我一直在研究如何使用RestKit 0.22.0来连接Core Data中的关系,并且想知道如何映射部分形成的实体。

我正在使用的API返回类似于下面所示的JSON。请注意,轨道数组正在返回包含轨道的外键ID的字典对象。

{
  "code": 200,
  "data": [
    {
      "active": true,
      "tracks": [
        {
          "collection": "tracks",
          "id": "00000000000000000000000000"
        },
        {
          "collection": "tracks",
          "id": "11111111111111111111111111"
        }
      ],
      "created_at": "2014-04-25 07:00:07.264000",
      "id": "abcdefghijklmnop1234567890",
      "title": "My Playlist",
      "updated_at": "2014-04-25 16:44:39.390000",
      "weight": 0.0
    }
  ],
  "info": {
    "limit": null,
    "skip": null,
    "total": 1
  }
}

数据模型如下所示(为演示而简化):

Simplified Core Data Model

播放列表的实体映射当前包含以下用于设置关系的代码:

[playlistEntityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"tracks" toKeyPath:@"tracks" withMapping:trackEntityMapping]];

然后我可以点击API来检索完整形式的对象。这似乎适用于GET请求,并且它在使用identifyAttributes设置的核心数据中使用相同的托管对象。但是,这闻起来不太对劲。如果我尝试使用具有任何本地修改关系的服务器上的PATCH对象的逆映射,RestKit将创建完整形式/嵌套的JSON结构以发送到服务器,而不是简单地使用外键。

我完成了我的研究,发现了许多有用的资源,如:

......和其他人。

看起来RKConnectionDescription可以帮助我剔除数据。 RKConnectionDescription文档包含一个示例,其中一组id被填充到实体的瞬态属性中。如果在文档片段之外有参考示例,我很乐意看到RKConnectionDescription的实例。这似乎是RestKit武器库中的一个强大的工具,可能值得一些示例代码或在wiki中进行深入探索。

有人能指出我正确的方向正确连接这些关系吗?

1 个答案:

答案 0 :(得分:1)

您无法使用RestKit的外键功能进行序列化,因为它专为映射传入数据而设计。我没有尝试过,但是当我采用映射的逆时,我不会期望连接被反转,因为它只是使用来自其他映射的信息(通常是瞬态变量)来促进关系建立。

所以,你应该做的是创建一个自定义映射(而不是反转),它只从关系(标识)中提取你想要的信息,并使用该映射进行序列化。