导入到CoreData时检查重复项

我使用RestKit将数据导入到Core Data存储中,并需要检查重复项。 如果商品已经在商店中,我想用最新的属性进行更新。 如果这是一个新的项目,我想创build它。

导入速度很慢,所以我使用了Instruments,并看到导入的最长部分是检查项目是否已经存在(具有获取请求)

所以我想知道如果检查是否该商品已经在商店中,是否更快:

  • 使用countForFetchRequest来查看该项是否已经存在,然后executeFetchRequest返回要更新的项
  • 只是executeFetchRequest获取项目更新
  • 还是有更好的方法来做到这一点?

我认为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; 

}

据我所知,在核心数据中查找和/或导入对象的最佳方法在高效实现查找或创build中进行了描述。

该文档描述了一个查找或创build模式,它基于sorting数据:从服务中下载的数据以及从商店中获取的数据。

我真的build议你阅读我提供的链接。 你会看到你的表演加快。

显然你应该在后台做这个工作,防止主线程冻结,使用线程限制或新的iOS Core Data队列API。

希望有所帮助。