将对象映射到键/值列表

时间:2014-06-28 17:21:34

标签: ios restkit restkit-0.20

我有一个对象列表,我想将其映射到json,如下所示:

"tags": {
    "f6a34fea-5d06-4fb2-a2c7-127e2b58165a": true,
    "39413ca6-b817-4ede-abd3-35822aec91b6": true
  },

我现在有什么:

RKObjectMapping *tagRequestMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[tagRequestMapping addAttributeMappingToKeyOfRepresentationFromAttribute:@"id"];
[tagRequestMapping addAttributeMappingsFromDictionary:@{@"hasTasks" : @"(id)"}];
tagRequestMapping.forceCollectionMapping = NO;
[taskRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"tags"
                                                                                   toKeyPath:@"tags"
                                                                                 withMapping:tagRequestMapping]];

这导致以下json:

"tags": [
    {
      "f6a34fea-5d06-4fb2-a2c7-127e2b58165a": true
    },
    {
      "39413ca6-b817-4ede-abd3-35822aec91b6": true
    }
  ],

不幸的是,webapp不接受这个有效。我使用相同的规则将数据从json映射到我的核心数据对象,它的工作正常。但不是核心数据到json。 我将如何修改我的映射,以获得具有所有值的单个对象,正如指定的那样?

1 个答案:

答案 0 :(得分:1)

感谢Wain我想出了一个解决方案:

我在我的Task类中添加了一个新属性,它是readonly并且有一个自定义的getter。在那个getter我从我的NSSet of Tag对象创建一个字典。然后对于映射部分,我只是将我的新属性添加为应该映射的普通属性,并且它完美地工作。

Custom Getter:

- (NSDictionary *)getTagDictionary {
    NSMutableDictionary *tagDictionary = [NSMutableDictionary dictionary];
    for (Tag *tag in self.tags) {
        [tagDictionary setObject:tag.hasTasks forKey:tag.id];
    }
    return tagDictionary;
}

映射:

[taskRequestMapping addAttributeMappingsFromDictionary:@{
        @"tagDictionary":@"tags"}];