RestKit主键属性

问题描述:

我从json文件加载数据,我将其保存。 我做了两次... 我在Core Data sqlite数据库中有两个条目。 即使我在映射中设置了primaryKeyAttribute。RestKit主键属性

mapping.primaryKeyAttribute = @"code"; 
    [mapping mapAttributesFromArray :mappedFields]; 
    [[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:entityName]; 

的json

{ “myEntity所”:[{ “代码”: “axv2”, “数据”: “内容”}]};

这里回调:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    NSLog(@"Entries loaded %d",[objects count]); 
    lastResult = objects; 

    for(MyEntity * myEntity in lastResult) {  
     [self saveContext];  
    } 
} 

我的实体正确映射...但Restkit允许一个以节省重复的条目与相同的主键?

这很奇怪,我明白这个主键属性可以避免这个问题。

由于采用最新版本RESTKit(0.23.2),您可以定义主键是这样的:

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

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

不,事实并非如此,因为Core Data保留了自己的密钥。您可以通过检查您的主键是否存在并在保存有问题的实体实例之前轻松解决此问题。

+0

这意味着每次我想要保存上下文时,我必须循环托管上下文的每个实体来检查实体是否存在于sqlite数据库中? Restkit不提供某些东西?还是核心数据? – Sam

+1

基本上,是的。或者,在创建新项目之前,从数据库中获取它。如果提取返回为空,则创建它,否则甚至不要将其插入托管对象上下文中。我这样做,它非常有效。 – Mundi

+1

我有同样的重复问题,但是Restkit在插入数据库之前确实提供了一个检查,但是由于某种原因,似乎没有与我(和你)一起调用。看看我如何“解决”暂时的,直到我找到正确的答案http://*.com/questions/7799890/primarykeyattribute-not-working-restkit-core-data – mateusmaso