RestKit,问题和标签之间的多对多关系,如Stackoverflow api

时间:2012-06-29 10:52:43

标签: ios core-data many-to-many restkit

我们使用RestKit来缓存来自远程Web服务的数据,类似于Stackoverflows API。

在API中有问题和标签,但不是在文本中获取标签,而是获得标签ID。

问题资源如下所示:

{
  "items": [
    {
      "question_id": 11260172,
      "tags": [
          { "tag_id" : 1},
          { "tag_id" : 2},
          { "tag_id" : 3}
      ],
      "view_count": 1,
      [...]
}

标签资源如下所示:

{
  "items": [
    {
      "id": 1,
      "name": "c#",
    },
    {
      "id": 2,
      "name": "java",
    },
    {
      "id": 3,
      "name": "php",
    }]
}

我们想在问题和标签之间创建一个连接表,这样问题可以有很多标签,标签有很多问题。

我们有一对多工作,但不是很多很多的联接表。因此,我们想知道RestKit多对多映射应该如何寻找这样的关系,以及数据模型应该如何看待。

我们尝试了以下映射,但它并不是多对多的。

[tagMapping mapKeyPath:@"id" toRelationship:@"questions" withMapping:tagsQuestionsMappingMapping];
[questionMapping mapKeyPath:@"tags" toRelationship:@"tags" withMapping:tagsQuestionsMappingMapping];

1 个答案:

答案 0 :(得分:1)

我们很清楚。由于这两个不同的Web服务中的根密钥相同,因此您需要使用两个不同的映射。

以下是问题终点的示例映射:

RKManagedObjectMapping* nested = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore:nil];
[nested mapKeyPath: @"tag_id" toAttribute: @"id"];

RKManagedObjectMapping* questions = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore: nil];
[questions mapAttributes: @"question_id", @"view_count", nil];  //I don't know your core data model...
[questions hasMany: @"tags" withMapping: nested];
[questions connectRelationship: @"tags" withObjectForPrimaryKeyAttribute: @"tag_id"];

以下是标签端点的示例映射

RKManagedObjectMapping* tags = [RKManagedObjectMapping mappingForClass: [Tag class] inManagedObjectStore: store];
[tags mapAttributes: @"id", @"name", nil];

注意:

1)标签映射每次都不同,因为每个Feed中的主键属性名称不同

2)我不知道您的核心数据地形,因此这些地图可能无法正常工作。您将需要了解我正在做什么,并为您的应用程序重做它。

3)你永远不用担心连接表。这由框架处理。