0

私は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.

では、データ マッピングをどのように行うべきかを知る必要があります。

4

2 に答える 2

0

これが私の解決策です:

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];

于 2015-11-05T09:38:46.827 に答える
0

配列にドリルダウンしようとしていて、それが不可能であるため、キーパスdata.viwer.themes.edges.nodeが深すぎます。持つことができる最長のキー パスは でdata.viwer.themes.edgesあり、マッピングは「ノード」を含む各オブジェクトを処理します。

于 2015-10-30T15:02:36.333 に答える