Core data RestKit/CoreData未更新-创建重复项

Core data RestKit/CoreData未更新-创建重复项,core-data,ios5,restkit,Core Data,Ios5,Restkit,我有一个ios 5应用程序,它不创建任何数据——它只是对REST Web服务进行GET调用,并用这些记录填充sqlite数据库。当本地数据库中没有记录时,最初的GET非常有效。但是,当我进行后续调用时,我将只返回自上次获取以来数据已更改的记录子集。但实际情况是,这些记录只是被再次添加,而不是更新现有记录 我有一个ID字段,它是主键(或者应该是主键),当一个ID已经存在的记录进入时,我希望更新该数据。如果该ID不存在,则它应该是一个insert 在XCode的数据模型中,我没有看到将我的ID字段设

我有一个ios 5应用程序,它不创建任何数据——它只是对REST Web服务进行GET调用,并用这些记录填充sqlite数据库。当本地数据库中没有记录时,最初的GET非常有效。但是,当我进行后续调用时,我将只返回自上次获取以来数据已更改的记录子集。但实际情况是,这些记录只是被再次添加,而不是更新现有记录

我有一个ID字段,它是主键(或者应该是主键),当一个ID已经存在的记录进入时,我希望更新该数据。如果该ID不存在,则它应该是一个insert

在XCode的数据模型中,我没有看到将我的ID字段设置为“主键”的方法。我在didFinishLaunchingWIthOptions方法中尝试过这样做:

userMapping.primaryKeyAttribute = @"id";
但单凭这一点似乎并没有什么作用

这是我实际执行GET的调用:

 // Load the object model via RestKit   
[objectManager loadObjectsAtResourcePath:[@"/synchContacts" appendQueryParams:params] delegate:self];

似乎一切都是自动完成的。在这一点上,我不知道我应该把逻辑放在哪里,以检查ID是否存在,如果存在,更新还是插入,或者做什么

您的操作似乎是正确的,当发生didLoadObjects回调时,您应该能够查询所需对象的核心数据

您可能对设置获取请求的方式有问题。使用最新的RestKit,您可以使用RKObjectMappingProvider的

- (void)setObjectMapping:(RKObjectMappingDefinition *)objectMapping forResourcePathPattern:(NSString *)resourcePathPattern withFetchRequestBlock:(RKObjectMappingProviderFetchRequestBlock)fetchRequestBlock;
函数,并让fetchRequestBlock获取正确的数据

不过,RestKit并不能很好地处理部分更新请求。在非常活跃的RestKit google群中,你可能会更幸运。

引用: 在XCode的数据模型中,我没有看到将我的ID字段设置为“主键”的方法。我在didFinishLaunchingWIthOptions方法中尝试过这样做: userMapping.primaryKeyAttribute=@“id”


请记住,“primaryKeyAttribute”是来自api负载的属性,而不是CoreData自己管理的CoreData id。RestKIt然后将(不可见)CoreData主键映射到指定的JSON键。

从最新的RestKIt版本(0.23)开始,您可以这样定义主键:

[_mapping addAttributeMappingsFromDictionary:@{ @"id" : @"objectId", @"name" : @"name" }];
[_mapping setIdentificationAttributes:@[ @"objectId" ]];
而objectId是核心数据对象的主键