IOS Core data fetch-request – sorting

Estoy usando un hilo de background para get un número limitado de loggings orderados con date.

Todo funciona bien hasta que elimino un logging en el subprocess de interfaz de usuario (tableview).

//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]; 

El subprocess de background se registra para NSManagedObjectContextDidSaveNotification y realiza el siguiente selector

 //this is done in the background thread -(void) didSavePersistenceStore:(NSNotification *)notification { [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification]; } 

El problema: después de borrar un logging, los resultados de búsqueda posteriores no se orderan con la date.

Qué me estoy perdiendo ?

Primero, asegúrese de no usar managedObjectContext del hilo incorrecto. Puede llamar a performBlock para hacerlo en el context apropiado.

En segundo lugar, el descriptor de búsqueda que utiliza para la búsqueda no persiste. Entonces, a less que sigas trayendo con los mismos criterios de sorting, no lo obtendrás de esa manera.

Si desea ese comportamiento, use un controller de resultados de búsqueda. Mantendrá su vista deseada en la database.

De la documentation de Apple:

If you set the value to NSManagedObjectIDResultType, this will demote any sort orderings to “best efforts” hints if you do not include the property values in the request.

Debe escribir todos los cambios en la tienda persistente o establecer includesPendingChanges en NO.