NSSortdescriptor ineficaz no resultado da busca do NSManagedContext

Eu estou tentando classificar o meu resultado NSFetchRequest usando um NSSortdescriptor usando uma chave apontando para um valor NSDate. Meus resultados de buscas saem totalmente aleatórios sem nenhuma razão clara.

O NSManagedObjectContext que estou usando é atualizado com um salvamento de um contexto filho aninhado criado em uma subclasse de NSOperation. Eu sei que tudo isso é feito com sucesso porque eu posso obter todos os dados necessários do contexto pai (principal). Buscar com isso só não vai classificar na data!

Coisa estranha é; predicados para selecionar as entidades (chamadas de "Tweet") entre duas datas funciona bem!

Aqui está algum código para ilustrar o meu 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>

Alguém pode me dizer por que o NSSortDescriptor não está funcionando para minhas buscas?

Obrigado!

- Atualização -

Parece que o NSSortDescriptor funciona bem quando eu busco do principal (pai) managedObjectContext no thread principal sem usar o método performBlock. Isso ainda não me ajuda a fazer buscas ordenadas em um NSPrivateQueueConcurrencyType managedObjectContext. Criar o NSFetchRequest, NSSortDescriptor e NSPredicate dentro do performBlock também não resolve o problema.

questionAnswers(3)

yourAnswerToTheQuestion