2011-11-19 14 views
7

Cardo datos de un archivo json, lo guardo. Lo hago dos veces ... Obtuve dos entradas en mi base de datos sqlite de Core Data. Incluso si configuré en la asignación el primaryKeyAttribute.RestKit atributo de clave principal

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

Mi JSON

{ "myEntity": [{ "código": "axv2", "datos": "contenido"}]};

Aquí la devolución de llamada:

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

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

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

Mi entidad está asignado correctamente ... Pero Restkit permite una para guardar las entradas duplicadas con la misma clave primaria?

Es extraño, entendí que este atributo de clave principal evitaría este problema.

Respuesta

1

A partir de la versión más reciente RESTKit (0.23.2) se puede definir la clave principal de esta manera:

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

Mientras objectId que es clave principal en el objeto de datos central.

1

No, ese no es el caso, ya que Core Data conserva sus propias claves. Puede resolver fácilmente este problema comprobando si su clave principal existe y antes de guardar la instancia de la entidad en cuestión.

+0

Eso significa que cada vez que deseo guardar el contexto, debo hacer un bucle en cada entidad del contexto gestionado para verificar si la entidad existe en sqlite db? ¿Restkit no proporciona algo? O datos centrales? – Sam

+1

Básicamente, sí. O bien, antes de crear un nuevo elemento, descárguelo de la base de datos. Si la búsqueda vuelve vacía, créela; de lo contrario, no la insertes en el contexto del objeto gestionado. Lo hice de esta manera y es bastante eficiente. – Mundi

+1

Tengo el mismo problema con las duplicaciones, sin embargo, Restkit proporciona una verificación antes de insertarlo en la base de datos, pero parece que no me llama a mí (y a usted) por algún motivo. Mira cómo "resolví" temporalmente, hasta que encuentre la respuesta correcta http://stackoverflow.com/questions/7799890/primarykeyattribute-not-working-restkit-core-data – mateusmaso