我正在后台队列中的子 moc 中进行数据处理。我需要按 ID 查询数据库,以便区分更新现有对象和创建新对象。我发现大部分时间(50 个项目的总处理时间约为 2 秒)被executeFetchRequest:error:
. is 是最NSPredicate
简单的形式——只匹配单个 ID 属性(ID 属性已被索引),并且NSFetchRequest
应该返回一个或无(ID 是唯一的)。有没有办法优化这种NSFetchRequest
?
这是我当前的代码:
+ (User *)userWithID:(NSNumber *)ID inManagedObjectContext:(NSManagedObjectContext *)context {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID == %@", ID];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:1];
NSError *error = nil;
NSArray *users = [context executeFetchRequest:fetchRequest error:&error];
if (error) {
abort();
}
if ([users count] == 1) {
return [users objectAtIndex:0];
} else if ([users count] > 1) {
// Sanity check.
…
} else {
return nil;
}
}