Criação de seções de mesa com NSFetchedResultsController
-
19-09-2019 - |
Pergunta
Eu estou usando NSFetchedResultsController
para conduzir os dados para o meu UITableViewController
. Uma versão simplificada do objeto gerenciado Estou olhares Buscando assim (bem, por exemplo):
Person:
-(BOOL)hasPet;
-(BOOL)hasDog;
Basicamente, eu quero a minha tabela para mostrar somente aqueles Person
objetos que têm um animal de estimação. Então, isso é simples, eu posso usar um predicado. Agora, para aqueles que hasPet == YES
, quero colocá-los na tabela em 2 secções, primeiro hasDog == YES
seção, eo segundo é hasDog == NO
. Aqui é onde eu estou um pouco confuso. Aqui é onde eu configurar meu controlador resultados, espero que alguém pode ajudar a orientar-me na direção certa.
- (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;
}
é um descritor de tipo onde eu preciso estar focando minha atenção?
Solução
É simples! Basta fornecer o NSFetchedResultsController com um sectionNameKeyPath
(que neste caso seria hasDog
) em seu inicializador.
A única ressalva a esta, no entanto, é os nomes de seção será 0
& 1
respectivamente, mas é facilmente curável.