ソート記述子では表現できない方法でソートする必要があるオブジェクトがいくつかあります (ツリー内の位置が関係します)。現時点では、バックグラウンド スレッドを並べ替え、オブジェクト ID を収集してから、次のようにメイン コンテキストに戻しています。
for (NSManagedObjectID *objectID in objectIDs)
{
NSManagedObject *managedObject = [mainContext existingObjectWithID:objectID error:outError];
if (!managedObject) return nil;
[array addObject:managedObject];
}
これには多くの DB ヒットが含まれるため、一度に実行することをお勧めします。Core Data Programming Guideでは、次のような述語を使用してこれを行うことを推奨しています。
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[MyEntity entityName]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", objectIDs];
NSArray *array = [mainContext executeFetchRequest:fetchRequest error:&error];
@"SELF IN %@"
ただし、他の場所では a を使用してソート記述子を提供しているため、順序が失われるのではないかと心配しています。コア データ バッチ フォールトは順序を維持しますか?