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

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

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

我使用的 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 请求,并且它在具有 identificationAttributes 设置的核心数据中使用相同的托管对象。然而,这闻起来不太对劲。如果我尝试使用反向映射到服务器上具有任何本地修改关系的 PATCH 对象,RestKit 将创建完全形成/嵌套的 JSON 结构以发送到服务器,而不是简单地使用外键。

我进行了研究并发现了许多有用的资源,例如:

...和其他人。

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

谁能指出正确的方向以正确连接这些关系?

最佳答案

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

因此,您应该做的是创建一个自定义映射(而不是反向映射),该映射仅从关系(身份)中提取您想要的信息,并使用该映射进行序列化。

关于ios - RestKit - 通过嵌套外键的核心数据多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379516/

相关文章:

iphone - 解析 XML 和构建 Core Data 数据库的最有效过程是什么?

ios - executefetchrequest 导致崩溃

iphone - 如何将 Admob 横幅放在 iPhone 4S 和 iPhone 5 的底部?

iphone - .Xib使用Xcode 4.6.1运行项目时创建错误

ios - 如何将核心数据堆栈添加到 WatchKit 应用程序

php - Symfony3 : How to set multiple connections?

timezone - 是否有信誉良好的来源提供 UN/LOCODE 到奥尔森时区的映射?

php - Doctrine2/Symfony 2 @ParamConverter 使用自定义存储库方法删除未映射的参数

ios - 我不应该使用self-> iVar = some;而不是iVar =我的init中有东西

ios - objective-c : Where to save the files in folder?