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

Rpr*_*ata 5 objective-c object-object-mapping ios restkit

我有一个与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
            }
        ]
    }
] }
Run Code Online (Sandbox Code Playgroud)

这工作正常,一切都与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
            }
        ]
    }
] }
Run Code Online (Sandbox Code Playgroud)

我将产品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];
Run Code Online (Sandbox Code Playgroud)

所以我想这很容易改变

[destinationSet setSet:destinationObject];

[destinationSet addObjectsFromArray:[destinationObject allObjects]]

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

干杯,

Rpr*_*ata 2

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

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