Überprüfung auf Duplikate beim Import in CoreData
Ich importiere Daten mit RestKit in einen Core-Datenspeicher und muss nach Duplikaten suchen. Wenn sich der Artikel bereits im Geschäft befindet, möchte ich ihn mit den neuesten Attributen aktualisieren. Wenn es sich um ein neues Objekt handelt, möchte ich es erstellen.
Der Import war langsam, daher habe ich Instrumente verwendet und festgestellt, dass der längste Teil des Imports darin bestand, zu überprüfen, ob das Element bereits vorhanden ist (mit einer Abrufanforderung).
Ich würde also gerne wissen, ob sich der Artikel bereits im Geschäft befindet.
Verwenden Sie countForFetchRequest, um festzustellen, ob das Element bereits vorhanden ist, und führen Sie dann executeFetchRequest aus, um das zu aktualisierende Element oder zurückzugebenFühren Sie einfach "executeFetchRequest" aus, um das zu aktualisierende Element abzurufenOder gibt es einen besseren Weg, dies zu tun?Ich dachte, countForFetchRequest wäre schneller, da nicht das gesamte NSManagedObject zurückgegeben wird, und führe die Abrufanforderung nur aus, wenn ich weiß, dass es ein NSManagedObject geben wird.
Vielen Dank
- (Product *)productWithId:(int)productID {
NSManagedObjectContext *context = [Model sharedInstance].managedObjectContext;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"product_id == %d", productID];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context];
request.predicate = predicate;
request.fetchLimit = 1;
NSError *error = nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
if (!error && count == 1) {
NSArray *results = [context executeFetchRequest:request error:&error];
if (!error && [results count]) {
return [results objectAtIndex:0];
}
return nil;
}
return nil;
}