我有两个实体'Parent'和'Child'。父实体与子实体有一对多的关系,子与父对象有一对一的关系,“父”实体有一个唯一的id(主键属性),我每次映射。
当我调用API时,响应就像这样
{
"parent": {
"ss": "1",
"uid": 200,
"me": "Successfully Retrieved",
"pn": 2,
"cl": [
{
"cid": 1500,
"cn": "XYZ"
},
{
"cid": 1501,
"cn": "ABC"
}
]
}
}
以上响应已成功映射到DB。我可以通过[parent.childs allObjects]访问,它返回两个对象。
我有一个加载更多的功能,它调用相同的api和页码加1,我得到类似于上面的响应(3个对象)。但是当我尝试从数据库中获取数据时,我只得到最近响应的3个对象。我之前映射的两个对象的关系变为空。所以我无法访问所有对象。如何通过关系从DB访问所有数据。
这就是我的映射方式
RKObjectManager *manager = [[RestKit sharedDataManager] objectManager];
RKEntityMapping *parentMapping = [[MFResponseMapper sharedInstance]parentMapper]; //Primary key is mapping here
RKEntityMapping *childMapping = [[MFResponseMapper sharedInstance]childMapper]; //Child name and Id is mapping here.
[parentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"cl"
toKeyPath:@"childs"
withMapping:childMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:parentMapping
pathPattern:nil
keyPath:@"parent"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[manager addResponseDescriptor:responseDescriptor];
注意:我在模型中删除了Parent-Child(一对多)关系的规则。
由于
答案 0 :(得分:1)
在关系映射上,将assignmentPolicy
设置为RKUnionAssignmentPolicy
。
答案 1 :(得分:0)
你应该添加
parentMapping.identificationAttributes = @[@"uid"];
和
childMapping.identificationAttributes = @[@"cid"];
你必须这样做的原因是因为否则它只会创建另一个带有3个孩子的父母,这就是你所看到的。所以基本上在你再次调用API之后,你将有2个来自2个API调用的父母与相应的孩子(两个和三个)。