Restkit映射 - 使用嵌入对象/关系作为标识属性

时间:2013-08-06 21:32:33

标签: ios core-data restkit restkit-0.20

我无法映射特定的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"];

1 个答案:

答案 0 :(得分:1)

添加密钥路径作为标识属性可能会起作用。我实际上没有尝试过,但关键路径在大多数地方都有效。

personDetailsMapping.identificationAttributes = @[ @"person.personId" ]

如果没有,您可以设置映射以将人员ID复制到详细信息对象中。您需要添加一个新的持久属性,然后使用映射中的键路径:

@"personId" : @"person.personId"