Restkit 0.20中嵌套json的动态对象映射

时间:2014-02-18 23:15:46

标签: objective-c restkit restkit-0.20

任何人都可以帮我在restkit 0.20中映射这个json对象吗?

"feeds" : [
   {
    "id": 32131354,
    "caption": "Blah Blah Blah.",
    "story" : "blah blah someone blah blah someone else",
    "story_tags": {
        "0": [
            {
            "id": 21231654,
            "name": "Someone",
            "offset": 0,
            "length": 25,
            "type": "page"
            }
        ],
        "33": [
            {
            "id": 3213212313,
            "name": "Someone else",
            "offset": 33,
            "length": 12,
            "type": "page"
            }
        ]
    },
}
{
...
}
]

我真的很感激任何帮助。这就是现在正在做的事情:

RKEntityMapping *feedsMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([FacebookFeed class]) inManagedObjectStore:managedObjectStore];
feedsMapping.identificationAttributes = @[@"id"];
[feedsMapping addAttributeMappingsFromDictionary:@{

                                                   @"caption" : @"caption",
                                                   @"id" : @"id",
                                                   @"story" : @"story",
                                                }];

这是关系映射

RKEntityMapping *facebookFeedStoryTagsMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([FacebookFeedStoryTag class]) inManagedObjectStore:managedObjectStore];
facebookFeedStoryTagsMapping.identificationAttributes = @[@"id"];
[facebookFeedStoryTagsMapping addAttributeMappingToKeyOfRepresentationFromAttribute:@"offset"];
[facebookFeedStoryTagsMapping addAttributeMappingsFromDictionary:@{
                                                                 @"(offset).id" : @"id",
                                                                 @"(offset).length" : @"length",
                                                                 @"(offset).name" : @"name",
                                                                 @"(offset).type" : @"type",
                                                                 }];

[feedsMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"story_tags" toKeyPath:@"story_tags" withMapping:facebookFeedStoryTagsMapping]];

但是我收到以下错误:

restkit.object_mapping:RKMappingOperation.m:745 Key path 'story_tags' yielded collection containing another collection rather than a collection of objects: (
    (
            {
        id = 31314654654;
        length = 25;
        name = "Someone";
        offset = 0;
        type = page;
    }
)
)

1 个答案:

答案 0 :(得分:0)

JSON "0": [提出了一个问题,因为我们真的想要一个字典(这就是你的映射的编写方式),但实际上我们有一个数组。这是您看到的错误的来源和含义。

理想情况下,您会更改JSON ...

现在,FacebookFeedStoryTag需要将整个数组(及其包含的字典)映射到可转换属性中。这是因为映射无法处理嵌套数组。

您可以将此可转换属性设置为瞬态,并实现自定义setter / willSave方法以获取数组并提取字典内容。由于密钥名称匹配,可以使用setValuesForKeysWithDictionary:完成(尽管您需要处理offset密钥)。