【问题标题】:RestKit - Data MappingRestKit - 数据映射
【发布时间】:2015-10-30 10:37:51
【问题描述】:

我是 RestKit 的新手。 有人可以帮我做地图吗?我有 JSON,我需要从 JSON 读取和保存数据。我该怎么做?

 {"data": {
    "viewer": {
      "themes": {
        "edges": [
          {
            "node": {
              "id": "61c39",
              "name": "ff"
            }
          }
        {
            "node": {
              "id": "dd95af4b-"",
              "name": "growth",
            }
          }
        ]
      }
    }
  }
}

这是我的映射代码的一部分:

// Defines mapping for DefaultThemes
RKEntityMapping *mappingDefaultTheme = [RKEntityMapping mappingForEntityForName:@"DefaultThemeData"
                                                         inManagedObjectStore:self.managedObjectStore];
mappingDefaultTheme.identificationAttributes = @[@"themeId"];
[mappingDefaultTheme addAttributeMappingsFromDictionary:@{ @"node.id" : @"themeId", @"node.name" : @"name"}];



RKResponseDescriptor *themeDefaultListResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mappingDefaultTheme
                                                                                                   method:RKRequestMethodGET
                                                                                              pathPattern:@"graphql"
                                                                                                  keyPath:@"edges.node"
                                                                                              statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

运行应用程序时出现错误:

Error: No mappable object representations were found at the key paths searched.

所以我需要知道,我应该如何进行数据映射?

【问题讨论】:

  • 你需要展示你尝试过的代码并解释它做错了什么
  • 我添加了部分代码

标签: objective-c mapping restkit data-mapping


【解决方案1】:

关键路径data.viwer.themes.edges.node 太深,因为您试图深入到数组中,但这是不可能的。您可以拥有的最长键路径是data.viwer.themes.edges,然后映射将处理包含“节点”的每个对象。

【讨论】:

  • 我更新了密钥路径,但我也有同样的错误。
  • 看着你更新你没有按照我说的去做 - 你删除了关键路径的开始而不是结束......
  • 好吧,那么您正在映射主题,您没有提供详细信息,并且您的代码使用了不在 json 中的键 - 我怎么猜?
  • 问题是如何从 JSON 读取和保存节点?是的,也许我在代码中犯了错误,这就是为什么在这里问!
  • 显示DefaultThemeData的定义
【解决方案2】:

这是我的解决方案:

RKObjectMapping* chartDataDetailMapping = [RKObjectMapping mappingForClass:[MADefaultThemeData class]];

[chartDataDetailMapping addAttributeMappingsFromDictionary:@{@"id": @"themeId",
                                                             @"name": @"name"}];

RKObjectMapping* chartDataMapping = [RKObjectMapping mappingForClass:[MANode class]];
[chartDataMapping addAttributeMappingsFromDictionary:@{@"edges":@"edges"}];

RKObjectMapping* alertInstanceMapping = [RKObjectMapping mappingForClass:[MADefaultThemeList class]];

[alertInstanceMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"edges"
                                                                                     toKeyPath:@"edges"
                                                                                   withMapping:chartDataMapping]];

[chartDataMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"node"
                                                                                     toKeyPath:@"themeData"
                                                                                   withMapping:chartDataDetailMapping]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:alertInstanceMapping
                                                                                                        method:RKRequestMethodPOST
                                                                                                        pathPattern:@"graphql"
                                                                                                        keyPath:@"data.viewer.themes"
                                                                                                    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[self addResponseDescriptor:responseDescriptor];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多