关系映射中的Restkit映射keyPath

Posted

技术标签:

【中文标题】关系映射中的Restkit映射keyPath【英文标题】:Restkit map keyPath in relationship mapping 【发布时间】:2016-02-18 13:58:23 【问题描述】:

我有一个 Json 文件,其结构大致如下:


    "id": "1",
    "child1": 
        "p1": "v1",
        "p2": "v2"
    ,
    "child2": 
        "p1": "v1",
        "p2": "v2"
    

child1 和 child2 属性通过关系映射进行映射,并且都使用相同的 RKEntityMapping。为了让 restkit 能够正确地做到唯一性,我想要一个额外的字段 type ,然后它的值将是 child1child2 取决于它是哪个项目。我想使用 @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,以便我可以将其用作标识属性?或者也许是另一种解决方法来实现这一目标?

【问题讨论】:

子对象没有来自服务器的唯一 ID 是否有原因? 它们永远不会独立于主对象。所以他们的唯一密钥并不是真正必要的。 【参考方案1】:

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

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

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

【讨论】:

以上是关于关系映射中的Restkit映射keyPath的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 无法为 keyPath 添加映射

“找不到给定内容的任何映射,keyPath=null”RestKit 0.2

RestKit 直接 + 反向关系映射

通过 ID 数组映射 RestKit 中的关系不起作用

RestKit 0.2 'NSInternalInconsistencyException',原因:'无法为 keyPath scheduleEntries 添加映射,一个已经存在...'

如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?