我有一个对象列表,我想将其映射到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。 我将如何修改我的映射,以获得具有所有值的单个对象,正如指定的那样?
答案 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"}];