2011-11-19 3 views
7

Carico i dati da un file JSON, l'ho salvato. Lo faccio due volte ... Ho ricevuto due voci nel mio database sqlite Core Data. Anche se ho impostato nella mappatura il primaryKeyAttribute.Attributo chiave primaria RestKit

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

mio JSON

{ "MyEntity": [{ "codice": "axv2", "dati": "contenuti"}]};

Qui il callback:

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

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

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

mio soggetto sia correttamente mappato ... Ma Restkit permettono di salvare le voci duplicate con la stessa chiave primaria?

È strano, ho capito che questo attributo chiave primaria avrebbe evitato questo problema.

risposta

1

A partire dalla versione più recente RESTKit (0.23.2) è possibile definire la chiave primaria in questo modo:

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

Mentre objectId si è la chiave primaria per l'oggetto di dati di base.

1

No, non è così, poiché Core Data mantiene le proprie chiavi. Puoi facilmente risolvere questo problema controllando se la tua chiave primaria esiste e prima di salvare l'istanza dell'entità in questione.

+0

Significa che ogni volta che voglio salvare il contesto, devo eseguire il ciclo su ciascuna entità del contesto gestito per verificare se l'entità esiste in sqlite db? Il restkit non fornisce qualcosa? O dati principali? – Sam

+1

Fondamentalmente, sì. Oppure, prima di creare un nuovo elemento, recuperarlo dal database. Se il recupero ritorna vuoto, crearlo, altrimenti non inserirlo nemmeno nel contesto dell'oggetto gestito. L'ho fatto in questo modo ed è abbastanza efficiente. – Mundi

+1

Ho lo stesso problema con le duplicazioni, tuttavia il Restkit fornisce un controllo prima di inserirlo nel database, ma sembra che non stia chiamando con me (e voi) per qualche motivo. Scopri come ho "risolto" temporaneamente, finché non trovo la risposta giusta http://stackoverflow.com/questions/7799890/primarykeyattribute-not-working-restkit-core-data – mateusmaso