Проверка на наличие дубликатов при импорте в CoreData
Я импортирую данные в Базовое хранилище данных с помощью RestKit и должен проверить их на наличие дубликатов. Если товар уже находится в магазине, я бы хотел обновить его до последних атрибутов. Если это новый элемент, я бы хотел его создать.
Импорт был медленным, поэтому я использовал Instruments и увидел, что самая длинная часть импорта проверяла, существует ли элемент (с запросом на выборку)
Поэтому я хотел бы знать, проверяет ли товар уже в магазине, быстрее ли он:
use countForFetchRequest to see if the item already exists, then executeFetchRequest to return the item to update or just executeFetchRequest to get the item to update or is there a better way to do this?Я думал, что countForFetchRequest будет быстрее, поскольку весь NSManagedObject не возвращается и выполняет запрос на выборку только в том случае, если я знаю, что это будет NSManagedObject.
Спасибо
- (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;
}