NSSortdescriptor ineffektiv beim Abrufen des Ergebnisses von NSManagedContext

Ich versuche, mein NSFetchRequest-Ergebnis mithilfe eines NSSortdeskriptors zu sortieren, wobei ein Schlüssel auf einen NSDate-Wert verweist. Meine Abrufergebnisse kommen völlig zufällig ohne klaren Grund heraus.

Der von mir verwendete NSManagedObjectContext wird mit einer Speicherung aus einem verschachtelten untergeordneten Kontext aktualisiert, der in einer Unterklasse von NSOperation erstellt wurde. Ich weiß, dass dies alles erfolgreich durchgeführt wird, da ich alle erforderlichen Daten aus dem übergeordneten (Haupt-) Kontext abrufen kann. Abrufen von es wird nicht auf Datum sortieren!

Merkwürdige Sache ist; Prädikate für die Auswahl der Entitäten (genannt "Tweet") zwischen zwei Daten funktioniert gut!

Hier ist ein Code, der mein Problem veranschaulicht:

<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>

Kann mir jemand sagen, warum der NSSortDescriptor für meine Abrufe nicht funktioniert?

Vielen Dank!

- Update -

Es sieht so aus, als ob der NSSortDescriptor einwandfrei funktioniert, wenn ich vom Haupt-managedObjectContext (übergeordnet) auf den Haupt-Thread zugreife, ohne die performBlock-Methode zu verwenden. Dies hilft mir immer noch nicht beim sortierten Abrufen eines NSPrivateQueueConcurrencyType managedObjectContext. Das Erstellen von NSFetchRequest, NSSortDescriptor und NSPredicate im performBlock behebt das Problem ebenfalls nicht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage