NSSortdescriptor no es efectivo en la obtención de resultados desde NSManagedContext

Estoy tratando de ordenar el resultado de mi NSFetchRequest utilizando un NSSortdescriptor usando una clave que apunta a un valor NSDate. Mis resultados de búsqueda son totalmente aleatorios sin una razón clara.

El NSManagedObjectContext que estoy usando se actualiza con un guardado de un contexto hijo anidado creado en una subclase de NSOperation. Sé que todo esto se hace con éxito porque puedo obtener todos los datos necesarios del contexto principal (principal). Ir a buscarlo simplemente no se ordenará en la fecha!

Lo extraño es; los predicados para seleccionar las entidades (llamadas "Tweet") entre dos fechas funcionan bien!

Aquí hay un código para ilustrar mi problema:

<code>NSSortDescriptor* timeDescriptor = [NSSortDescriptor
                                        sortDescriptorWithKey:@"time"
                                        ascending:NO
                                        selector:@selector(compare:)];

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Tweet"];
[request setSortDescriptors:[NSArray arrayWithObjects:timeDescriptor, nil]];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"((time >= %@) AND (time <= %@))",startDate,endDate];
[request setPredicate:predicate];

NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setParentContext:[[NSApp delegate] managedObjectContext]];
[context performBlock:^{
    NSError* error = nil;
    NSArray* results = nil;

    results = [context executeFetchRequest:request error:&error];
    // Results here are not ordered correctly

    // 2nd try sorting results using fetched array (works!)
    results = [results sortedArrayUsingDescriptors:[NSArray arrayWithObjects:timeDescriptor, nil]];

    // This works too but not needed anymore
    /*results = [results sortedArrayUsingComparator:^(id obj1, id obj2) {
        Tweet* tweet1 = (Tweet*)obj1;
        Tweet* tweet2 = (Tweet*)obj2;
        //return [tweet1.time compare:tweet2.time]; // ascending
        return [tweet2.time compare:tweet1.time]; // descending
    }];*/

    if ([results count] > 0) {
        for (uint i = 0; i < [results count]; i++) {
            Tweet* tweet = [results objectAtIndex:i];
            NSDate* date = Tweet.time;
            NSLog(@"tweet date: %@", date);
        }
    }
}];
</code>

¿Alguien puede decirme por qué el NSSortDescriptor no funciona para mis búsquedas?

¡Gracias!

- Actualización -

Parece que el NSSortDescriptor funciona bien cuando recupero el elemento principal (padre) managedObjectContext en el hilo principal sin usar el método performBlock. Esto todavía no me ayuda a realizar búsquedas ordenadas en un objeto NSPrivateQueueConcurrencyType managedObjectContext. La creación de NSFetchRequest, NSSortDescriptor y NSPredicate dentro de performBlock tampoco soluciona el problema.

Respuestas a la pregunta(3)

Su respuesta a la pregunta