关系映射中的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 ,然后它的值将是 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,以便我可以将其用作标识属性?或者也许是另一种解决方法来实现这一目标?
【问题讨论】:
子对象没有来自服务器的唯一 ID 是否有原因? 它们永远不会独立于主对象。所以他们的唯一密钥并不是真正必要的。 【参考方案1】:我认为在这种情况下,我会在模型类中添加一些逻辑,以便在保存之前询问其关系和值以生成唯一标识符。根据您的示例数据,除了它们被映射到的关系之外,这 2 个子对象仍然是同一个对象,因此您可以使用非零关系的名称来确定它们是什么。
这对 RestKit 唯一性没有帮助,因为标识符不在 JSON 中。
因此,在这里,您需要一个获取请求块来清理所有孤儿(与任何父母都没有关系)。
【讨论】:
以上是关于关系映射中的Restkit映射keyPath的主要内容,如果未能解决你的问题,请参考以下文章
“找不到给定内容的任何映射,keyPath=null”RestKit 0.2
RestKit 0.2 'NSInternalInconsistencyException',原因:'无法为 keyPath scheduleEntries 添加映射,一个已经存在...'