8

Estoy usando NSFetchedResultsController para manejar los datos para mi UITableViewController. Una versión simplificada del objeto administrado estoy es similar al siguiente ir a buscar (así por ejemplo):Crear secciones de tabla con NSFetchedResultsController

Person: 
-(BOOL)hasPet; 
-(BOOL)hasDog; 

Básicamente, quiero mi mesa para mostrar sólo aquellos Person objetos que tienen una mascota. Así que eso es simple, puedo usar un predicado. Ahora, para aquellos que hasPet == YES, quiero ponerlos en la tabla en 2 secciones, primera sección hasDog == YES, y la segunda es hasDog == NO. Aquí es donde estoy un poco confuso. Aquí es donde configuro mi controlador de resultados, espero que alguien pueda ayudarme a orientarme en la dirección correcta.

- (NSFetchedResultsController *)fetchedResultsController { 
if (nil != fetchedResultsController) { 
    return fetchedResultsController; 
} 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Homework" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hasPet == %@", [NSNumber numberWithBool:YES]]; 
[fetchRequest setPredicate:predicate]; 

NSSortDescriptor *dogDescriptor = [[NSSortDescriptor alloc] initWithKey:@"hasDog" ascending:YES]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:dogDescriptor, sortDescriptor, nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *aController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 
aController.delegate = self; 
self.fetchedResultsController = aController; 

    // Release things 

return fetchedResultsController; 
} 

¿Es un descriptor de ordenación donde debo centrar mi atención?

Respuesta

15

¡Es simple! Simplemente proporcione el NSFetchedResultsController con un sectionNameKeyPath (que en este caso sería hasDog) en su inicializador.

La advertencia a esto, sin embargo, es que los nombres de sección serán 0 & 1 respectivamente, pero es fácilmente curable.

Cuestiones relacionadas