RestKit / CoreData不更新 - 创建重复项

时间:2012-05-08 14:44:41

标签: core-data ios5 restkit

我有一个不创建任何数据的ios 5应用程序 - 它只是对REST Web服务进行GET调用,并使用这些记录填充sqlite数据库。当本地数据库中没有记录时,初始GET很有用。但是,当我进行后续调用时,我将只返回自上次GET以来数据已更改的记录子集。但正在发生的事情是,记录只是再次添加,而不是更新现有记录。

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

我没有看到将我的ID字段设置为XCode中数据模型中的“主键”的方法。我尝试在didFinishLaunchingWIthOptions方法中执行此操作:

userMapping.primaryKeyAttribute = @"id";

但仅此一点似乎并没有做任何事情。

这是我实际执行GET的呼吁:

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

这似乎可以自动完成所有事情。到目前为止,我在丢失逻辑以检查ID是否存在,以及是否存在更新与插入,或者是什么时,我迷失了。

3 个答案:

答案 0 :(得分:1)

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

[_mapping addAttributeMappingsFromDictionary:@{ @"id" : @"objectId", @"name" : @"name" }];
[_mapping setIdentificationAttributes:@[ @"objectId" ]];

而objectId是核心数据对象的主键。

答案 1 :(得分:0)

您似乎正确地执行此操作,并且当您的didLoadObjects回调发生时,您应该能够查询Core Data以获取所需的对象。

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

- (void)setObjectMapping:(RKObjectMappingDefinition *)objectMapping forResourcePathPattern:(NSString *)resourcePathPattern withFetchRequestBlock:(RKObjectMappingProviderFetchRequestBlock)fetchRequestBlock;

函数并让fetchRequestBlock获取正确的数据。

尽管如此,RestKit并没有真正处理部分更新请求。你可能会在非常活跃的RestKit谷歌群上获得更多运气。

答案 2 :(得分:0)

引用: 我没有看到将我的ID字段设置为XCode中数据模型中的“主键”的方法。我尝试在didFinishLaunchingWIthOptions方法中执行此操作: userMapping.primaryKeyAttribute = @“id”;

请记住,'primaryKeyAttribute'是来自api有效负载的,而不是CoreData id,CoreData自行管理。然后,RestKIt将(不可见的)CoreData主键映射到指定的JSON密钥。