【发布时间】:2013-02-11 13:00:16
【问题描述】:
我在尝试在我的 iOS 应用和我的服务器之间同步给定用户的收藏团队列表时遇到了问题。事件流程如下:
用户收藏了一个团队
-
新的 favouriteTeam 对象被创建并保存到 Core Data:
NSError *错误; [[self.currentUser managedObjectContext] save:&error]; [[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext save:&error];
修改后的 favouriteTeams 数组被 POST 到服务器,并在服务器上加上时间戳,并与任何其他修改或最近添加的(由其他设备)对象一起返回。
我遇到的问题是发布的项目,因为它总是被返回,而不是被覆盖(基于标识属性)。返回的其他对象(无论是修改过的还是由其他设备新创建的)都不会被复制……只是用户设备中新创建的设备。
这是我的请求/响应映射代码:
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 Groups here.
谢谢!
更新:这种重复似乎不会在团队第一次被收藏时发生。以下任何对团队的收藏尝试都会导致此重复。
【问题讨论】:
-
你解决过这个问题吗?
-
Yes & No。我最终没有使用 RestKit,而是使用 AFNetworking 手动完成。
-
我解决了这个问题,将发布答案。
标签: ios objective-c cocoa-touch cocoa restkit