我无法映射特定的JSON结构,如下面的简化形式所示:
{"personDetails":{"eyeColor":"brown",
"height":"2m 12cm",
"specialRestrictions":null,
"person":{"personId":42,
"firstName":"Hummingbird",
"lastName":"Collins",
"dob":1360856245000,
"gender":"F",
"personCode":"8DECCC6D-68CA-47E1-AV7F-84C2039D517",
"isAdmin":false}
}
}
在这种情况下,我想使用"personId"
字段,甚至是"person"
对象本身作为"personDetails"
对象的主键。据我所知,没有办法做到这一点。我研究了RKConnectionDescription
,但在这种情况下似乎不适用,因为嵌入了整个对象,而不仅仅是外键属性。
我基本上希望这种关系是一对一的,当我打电话给我的服务时,就像这样,
http://server/services/getPersonDetailsByID/42
详细信息可以映射并保留在CoreData中,覆盖之前保存的PersonDetails
的{{1}}。目前,本地相同的Person
可以存在多个PersonDetails
个对象,因为没有密钥。
所以,我的问题是:可以设置RestKit映射来完成这个预期的行为吗?或者我是否需要自己处理删除任何过时的CoreData对象?
编辑: 这是我的映射当前的样子。
Person
以下是我尝试添加标识属性的两种不同方法:
RKEntityMapping* personDetailsMapping = [RKEntityMapping mappingForEntityForName:
@"personDetails" inManagedObjectStore:objectManager.managedObjectStore];
[personDetailsMapping addAttributeMappingsFromArray:@[@"eyeColor", @"height",
@"specialRestrictions"]];
[personDetailsMapping addPropertyMapping:[RKRelationshipMapping
relationshipMappingFromKeyPath:@"person" toKeyPath:@"person"
withMapping:personMapping]]; // personMapping defined earlier
和
personDetailsMapping.identificationAttributes = @[@"person"];
在不同的时间,他们每个人都会抛出这样的错误:
personDetailsMapping.identificationAttributes = @[@"personId"];
答案 0 :(得分:1)
添加密钥路径作为标识属性可能会起作用。我实际上没有尝试过,但关键路径在大多数地方都有效。
personDetailsMapping.identificationAttributes = @[ @"person.personId" ]
如果没有,您可以设置映射以将人员ID复制到详细信息对象中。您需要添加一个新的持久属性,然后使用映射中的键路径:
@"personId" : @"person.personId"