gpt4 book ai didi

objective-c - Restkit 对多关系附加到集合而不是设置新集合

转载 作者:可可西里 更新时间:2023-11-01 04:47:53 25 4
gpt4 key购买 nike

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

例如:我有一个经典的 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 的内部框架进行调查后,我注意到在 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]]

但是我想知道有没有更好的方法呢?

干杯,

最佳答案

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

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

关于objective-c - Restkit 对多关系附加到集合而不是设置新集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com