关系映射中的Restkit映射keyPath

时间:2016-02-18 13:58:23

标签: ios objective-c restkit

我有一个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?或者可能是另一种解决方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下我会在模型类中添加一些逻辑,以便在它保存之前询问它的关系和值以生成唯一标识符。根据您的样本数据,除了他们被映射到的关系之外,2个孩子仍然是同一个对象,因此您可以使用非零关系的名称来确定它们是什么。

这对RestKit unquing没有帮助,因为标识符不在JSON中。

所以,在这里,你需要一个获取请求块来清理任何孤儿(与父母没有任何关系)。