更新DB - Restkit时核心数据关系中断

时间:2013-09-18 06:41:12

标签: ios core-data mapping restkit restkit-0.20

我有两个实体'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(一对多)关系的规则。

由于

2 个答案:

答案 0 :(得分:1)

在关系映射上,将assignmentPolicy设置为RKUnionAssignmentPolicy

答案 1 :(得分:0)

你应该添加

parentMapping.identificationAttributes = @[@"uid"];

childMapping.identificationAttributes = @[@"cid"]; 

你必须这样做的原因是因为否则它只会创建另一个带有3个孩子的父母,这就是你所看到的。所以基本上在你再次调用API之后,你将有2个来自2个API调用的父母与相应的孩子(两个和三个)。