gpt4 book ai didi

ios - RestKit 0.20.0-rc1 - POST 后重复对象

转载 作者:行者123 更新时间:2023-12-03 17:23:16 24 4
gpt4 key购买 nike

我在尝试在 iOS 应用程序和服务器之间同步给定用户的喜爱球队列表时遇到问题。事件流程如下:

  1. 用户最喜爱的团队

  2. 创建新的 favouriteTeam 对象并将其保存到 Core Data:

    NSError *错误;[[self.currentUser ManagedObjectContext] 保存:&错误];[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext 保存:&error];

  3. 修改后的 favouriteTeams 数组被发布到服务器,在服务器上它们被加上时间戳并与任何其他修改或最近添加(由另一设备)对象一起返回。

  4. 我遇到的问题是,发布的项目(因为总是返回)被重复而不是被覆盖(基于identificationAttributes)。返回的其他对象(无论是修改的还是由其他设备新创建的)都不会被复制......只是从用户设备中新创建的设备。

这是我的请求/响应映射代码:

RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
// POST Request Mapping
RKObjectMapping *favouriteTeamMapping = [RKObjectMapping requestMapping];
[favouriteTeamMapping addAttributeMappingsFromArray:@[@"uuid", @"teamName", @"displayOrder"]];
RKRequestDescriptor *favouriteTeamRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:favouriteTeamMapping objectClass:[FavouriteTeam class] rootKeyPath:@"favouriteTeams"];
[objectManager addRequestDescriptor:favouriteTeamRequestDescriptor];
// Response Mapping
RKEntityMapping *favouriteTeamResponseMapping = [RKEntityMapping mappingForEntityForName:@"FavouriteTeam" inManagedObjectStore:objectManager.managedObjectStore];
favouriteTeamResponseMapping.identificationAttributes = @[@"uuid"];
[favouriteTeamResponseMapping addAttributeMappingsFromArray:@[@"uuid", @"teamName", @"displayOrder", @"lastModified"]];
RKResponseDescriptor *favouriteTeamResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:favouriteTeamResponseMapping pathPattern:@"/api/favouriteteam/" keyPath:@"data.favouriteTeams" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptorsFromArray:@[favouriteTeamResponseDescriptor]];
// POST
[objectManager postObject:favTeamsArray path:@"/api/favouriteteam/" parameters:nil success:nil failure:nil];

我似乎无法弄清楚为什么在设置identificationAttributes(favouriteDrug“uuid”属性)时会发生这种重复。 Core Data 中的对象是相同的(甚至相同的 uuid)。是什么导致了这种行为?

注意:此问题也发布在 RestKit Google 网上论坛 here.

谢谢!

更新:似乎在第一次收藏团队时不会发生这种重复。以下任何收藏团队的尝试都会导致此重复。

最佳答案

我遇到了类似的问题,虽然我无法真正确认这是否解决了您的问题,但无论如何我都会在这里发布我的答案。

我的问题是第一个对象可以很好地创建,但此后 Restkit 会在 coredata 中保存重复的对象,所以这听起来像是您所看到的问题。

我正在通过以下方式进行后调用来创建对象:* 在 coredata 中创建一个空白对象并用我需要的任何属性填充它* 使用restkit API对服务器进行后调用并传入新创建的对象

restkit 的作用是获取响应,将其填充到我创建的新对象中,并将其保存到 coredata 中,而不预先检查是否存在具有相同唯一 id 的另一个对象。这就是为什么第一个对象创建很好,但后续对象是重复的。

我解决这个问题的方法实际上是将原始值作为参数传递给restkit post API调用,并将nil作为对象。在回复中,restkit 将首先查看 coredata 以查看该 ID 的对象是否存在,并将更改与该对象合并,或者创建一个新对象。

关于ios - RestKit 0.20.0-rc1 - POST 后重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812476/

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