私はバックグラウンドキューの子モックでデータ処理を行っています。更新中の既存のオブジェクトと作成中の新しいオブジェクトを区別できるように、データベースをIDでクエリする必要があります。ほとんどの場合(合計処理時間は50アイテムで約2秒)がによって消費されていることがわかりましたexecuteFetchRequest:error:
。これNSPredicate
は最も単純な形式です—単一のID属性に一致するだけで(ID属性はすでにインデックス付けされています)、NSFetchRequest
1つまたはnoneを返す必要があります(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;
}
}