0

我们使用 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];
4

1 回答 1

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)你永远不用担心连接表。这是由框架处理的。

于 2012-06-29T15:44:33.427 回答