我正在使用 RestKit 将数据导入核心数据存储,并且需要检查重复项。如果该商品已在商店中,我想使用最新属性对其进行更新。如果它是一个新项目,我想创建它。
导入很慢,所以我使用 Instruments 并看到导入的最长部分是检查项目是否已经存在(使用 fetch 请求)
所以我想知道是否检查该项目是否已经在商店中,是否更快:
- 使用 countForFetchRequest 查看 item 是否已经存在,然后执行 FetchRequest 返回 item 进行更新或
- 只需执行FetchRequest 以获取要更新的项目
- 还是有更好的方法来做到这一点?
我认为 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;
}