Restkit to-many关系附加到set而不是设置新集

时间:2012-11-05 10:02:13

标签: objective-c ios restkit object-object-mapping

我有一个与iOS Restkit相关的问题。我有来自远程服务器的父子关系数据,并使用Restkit将这些对象映射到NSManagedObject对象。我目前遇到的问题是每次向服务器发出的请求都会消除"孩子"关系并将其替换为来自服务器的新数据。有没有办法避免这些并追加新的孩子?

例如:我有一个经典类别 - >产品关系。

{"categories": [
    {
        "cat_id": "1",
        "cat_title": "category 1",
        "cat_tag": 1,
        "product": [
            {
                "prod_id": "1",
                "prod_name": "product 1",
                "prod_tag": 1
            },
            {
                "prod_id": "2",
                "prod_name": "product 2",
                "prod_tag": 1
            }
        ]
    }
] }

这样可以正常工作,并且所有内容都可以通过CoreData上的关系正确保存。但是,如果我向服务器发出另一个请求并有新的响应:

{"categories": [
    {
        "cat_id": "1",
        "cat_title": "category 1",
        "cat_tag": 1,
        "product": [
            {
                "prod_id": "3",
                "prod_name": "product 3",
                "prod_tag": 1
            },
            {
                "prod_id": "4",
                "prod_name": "product 4",
                "prod_tag": 1
            }
        ]
    }
] }

我将在数据库中使用产品3和产品4替换产品1和产品2。我确信我正确设置了所有的关系和主键。 (cat_idprod_id都设置为主键。

通过RestKit的内部框架进行调查后,我注意到line 576类中的RKObjectMappingOperation周围有

RKLogTrace(@"Mapped NSSet relationship object from keyPath '%@' to
           '%@'. Value: %@", relationshipMapping.sourceKeyPath,
           relationshipMapping.destinationKeyPath, destinationObject);

NSMutableSet *destinationSet = [self.destinationObject
                         mutableSetValueForKey:relationshipMapping.destinationKeyPath];
[destinationSet setSet:destinationObject];

所以我想这很容易改变

[destinationSet setSet:destinationObject];

[destinationSet addObjectsFromArray:[destinationObject allObjects]]

但我想知道是否有更好的方法吗?

干杯,

1 个答案:

答案 0 :(得分:2)

感谢Reskit的支持。它现在由RKRelationshipMapping支持。(https://github.com/RestKit/RestKit/issues/989

只需将assignmentPolicy个实例的RKRelationshipMapping值设为RKUnionAssignmentPolicy

即可