8

J'utilise NSFetchedResultsController pour piloter les données de mon UITableViewController. Une version simplifiée de l'objet géré je suis aller chercher ressemble à ceci (ainsi, par exemple):Création de sections de table avec NSFetchedResultsController

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

Fondamentalement, je veux ma table pour montrer que ces objets Person qui ont un animal de compagnie. Donc, c'est simple, je peux utiliser un prédicat. Maintenant, pour ceux qui hasPet == YES, je veux les mettre dans le tableau en 2 sections, la première section hasDog == YES, et la seconde est hasDog == NO. C'est là que je suis un peu floue. Voici où je configure mon contrôleur de résultats, j'espère que quelqu'un peut m'aider à me diriger dans la bonne direction.

- (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; 
} 

Un descripteur de tri est-il un point sur lequel je dois concentrer mon attention?

Répondre

15

C'est simple! Fournissez simplement le NSFetchedResultsController avec un sectionNameKeyPath (qui dans ce cas serait hasDog) dans son initialiseur. Cependant, les noms de section seront respectivement 0 & 1, mais il est facile à traiter.