Restkit 对多关系追加到集合而不是设置新集合
Posted
技术标签:
【中文标题】Restkit 对多关系追加到集合而不是设置新集合【英文标题】:Restkit to-many relationship append to set instead of setting a new set 【发布时间】:2012-10-25 03:37:00 【问题描述】:我有一个与 ios Restkit 相关的问题。我有一个来自远程服务器的父子关系数据,并使用 Restkit 将这些对象映射到 NSManagedObject
对象。我目前遇到的问题是对服务器的每个请求总是消除“子”关系并将其替换为来自服务器的新数据。有没有办法避免这些并附加新的孩子?
例如:我有一个经典的 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_id
和 prod_id
都设置为主键)。
通过RestKit的内部框架调查,我注意到RKObjectMappingOperation
类中的line 576
周围,有
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】:感谢Reskit
的支持。现在支持RKRelationshipMapping
.(https://github.com/RestKit/RestKit/issues/989)
只需将RKRelationshipMapping
实例的assignmentPolicy
值设置为RKUnionAssignmentPolicy
【讨论】:
以上是关于Restkit 对多关系追加到集合而不是设置新集合的主要内容,如果未能解决你的问题,请参考以下文章