我有一个与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_id
和prod_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]]
但我想知道是否有更好的方法吗?
干杯,
答案 0 :(得分:2)
感谢Reskit
的支持。它现在由RKRelationshipMapping
支持。(https://github.com/RestKit/RestKit/issues/989)
只需将assignmentPolicy
个实例的RKRelationshipMapping
值设为RKUnionAssignmentPolicy