5

我有一个与 iOS Restkit 相关的问题。我有一个来自远程服务器的父子关系数据,并将这些对象映射到NSManagedObject带有 Restkit 的对象。我目前遇到的问题是对服务器的每个请求总是清除“子”关系并将其替换为来自服务器的新数据。有没有办法避免这些并附加新的孩子?

例如:我有一个经典的 Category --> Products 关系。

{"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 576RKObjectMappingOperation课堂上,有

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]]

但我想知道是否有更好的方法来做到这一点?

干杯,

4

1 回答 1

2

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

只需将实例的assignmentPolicy值设置为RKRelationshipMappingRKUnionAssignmentPolicy

于 2013-01-21T09:44:45.170 回答