Ich verwende einen Hintergrund-Thread, um eine begrenzte Anzahl von Datensätzen mit Datum sortiert abzurufen.IOS Core Daten Fetch-Anfrage - Sortierung
Alles funktioniert gut, bis ich einen Datensatz im UI-Thread (Tabellenansicht) löschen.
//this is done in the background thread
NSFetchRequest *frequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity"
inManagedObjectContext:self.managedObjectContext];
[frequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"date"
ascending:NO];
NSArray *descriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[frequest setSortDescriptors:descriptors];
[frequest setFetchOffset:fetchOffset];
[frequest setFetchLimit:20];
[frequest setResultType:NSManagedObjectIDResultType];
NSError *fetchError;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:frequest
error:&fetchError] mutableCopy];
Der Hintergrund-Thread wird für NSManagedObjectContextDidSaveNotification registriert und führt die folgenden Selektor
//this is done in the background thread
-(void) didSavePersistenceStore:(NSNotification *)notification
{
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}
Das Problem: Nach dem Löschen eines Datensatzes, nachfolgende Abruf Ergebnisse sind nicht mehr mit dem Datum sortiert.
Was fehlt mir?
Ihr Code ist korrekt. IMHO, der Fehler muss woanders liegen. – Mundi
Diese Benachrichtigung wird durch den Hauptthread ausgelöst und bewirkt, dass 'mergeChangesFromContextDidSaveNotification:' auf dem Hauptthread ausgeführt wird, der nicht der richtige Thread ist. Keine Ahnung, ob dies das Problem verursacht, aber es klingt sicher, als könnten einige kleine Fehler auftreten –
Das Ziel für mergeChangesFromContextDidSaveNotification ist der ManagedObjectContext, der dem Hintergrundthread zugeordnet ist. Ist es wichtig, welcher Thread die Nachricht in diesem Fall aufruft? – Sammy