Sprawdzanie duplikatów podczas importowania do CoreData
Importuję dane do magazynu danych podstawowych za pomocą RestKit i muszę sprawdzić, czy nie ma duplikatów. Jeśli przedmiot jest już w sklepie, chciałbym go zaktualizować o najnowsze atrybuty. Jeśli to nowy element, chciałbym go utworzyć.
Import był powolny, więc użyłem instrumentów i zobaczyłem, że najdłuższą częścią importowania było sprawdzenie, czy element już istnieje (z żądaniem pobrania)
Chciałbym więc wiedzieć, czy sprawdzając, czy przedmiot jest już w sklepie, czy szybciej jest:
użyj countForFetchRequest, aby sprawdzić, czy element już istnieje, a następnie executeFetchRequest, aby zwrócić element do aktualizacji lubpo prostu executeFetchRequest, aby zaktualizować elementczy jest lepszy sposób, aby to zrobić?Pomyślałem, że countForFetchRequest będzie szybszy, ponieważ cały obiekt NSManagedObject nie zostanie zwrócony, a żądanie pobrania zostanie wykonane tylko wtedy, gdy wiem, że będzie obiekt NSManagedObject.
Dzięki
- (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;
}