我有一个Json文件,其结构大致如下:
{
"id": "1",
"child1": {
"p1": "v1",
"p2": "v2"
},
"child2": {
"p1": "v1",
"p2": "v2"
}
}
child1和child2属性通过关系映射进行映射,并且都使用相同的 RKEntityMapping 。为了使restkit能够正确地执行唯一性,我希望有一个额外的字段 type ,然后将具有值 child1 或 child2 取决于它是哪个项目。我想使用 @ metadata.mapping.rootKeyPath ,但总是没有。
我的关系映射:
RKEntityMapping *childMapping = [RKEntityMapping mappingForEntityForName:@"Child" inManagedObjectStore:managedObjectStore];
[childMapping addAttributeMappingsFromDictionary:@{@"@parent.id" : @"userID", @"@metadata.mapping.rootKeyPath" : @"type"}];
[childMapping addAttributeMappingsFromArray:@[@"p1", @"p2"]];
childMapping.identificationAttributes = @[@"userID", @"type"];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"child1"
toKeyPath:@"child1"
withMapping: childMapping]];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"child2"
toKeyPath:@"child2"
withMapping: childMapping]];
有没有办法在关系映射中获取rootKeyPath,以便我可以将它用作identifyAttribute?或者可能是另一种解决方法来实现这一目标?
答案 0 :(得分:0)
我认为在这种情况下我会在模型类中添加一些逻辑,以便在它保存之前询问它的关系和值以生成唯一标识符。根据您的样本数据,除了他们被映射到的关系之外,2个孩子仍然是同一个对象,因此您可以使用非零关系的名称来确定它们是什么。
这对RestKit unquing没有帮助,因为标识符不在JSON中。
所以,在这里,你需要一个获取请求块来清理任何孤儿(与父母没有任何关系)。