Dados principais buscou o controlador de resultados e o cabeçalho da seção personalizado
-
23-09-2019 - |
Pergunta
Estou familiarizado com o uso comum e básico de um NSFetchedResultScontroller gerenciando as linhas de uma tabela, mas tenho um problema interessante.
Meus dados são organizados como tal: Cronograma <--- >> dia <--- >> rota. Atualmente, tenho uma visualização de tabela que possui agendas com um controlador de busca gerenciando a criação e exclusão de horários. Agora, quero criar uma visualização de tabela para rotas/dias.
Gostaria de listar uma rota em cada linha e criar cabeçalhos de seção personalizados que correspondam às informações dentro do dia relevante. Provavelmente, eu poderia invadir algo buscando todas as rotas e, em seguida, seccioná -las pelo relacionamento inverso com o respectivo dia, mas estou preocupado que não consiga aproveitar os métodos de delegadores do controlador de busca para atualizar a tabela quando Os objetos gerenciados mudam.
Alguém tem alguma experiência com isto? Alguma idéia de como avançar?
Obrigado.
Solução
O NSFetchedResultScontroller foi projetado para esse fim, para que você não precise inventar a roda.
Ao inicializar o seu NSFetchedResultScontroller, considere especificar o SectionNameKeypath. Essa propriedade é exatamente o que você precisa para gerar automaticamente a seção para você.
No seu caso, eu faria o seguinte:
NSEntityDescription: @"Route"
NSPredicate: @"day = %@"
NSFetchedResultsController: sectionNameKeyPath:@"route.day"
Você vê o que quero dizer, se precisar de mais código para esclarecimentos, diga -me.
Outras dicas
Você precisa pesquisar seguindo o relacionamento por meio do NSSET criado para representar a rota->> Caminho do dia em seu banco de dados. Supondo que você nomeou seu relacionamento IstraverSedon e o horário de dia como Isscheduled, seria algo como:
Route *route=[self.fetchedResultsController.fetchedObjects objectAtIndex:0];
for (Day *day in route.isTraversedOn) {
Schedule *schedule = day.isScheduled;
NSLog(@"route is traversed on %@ according to schedule %@",day.name,schedule.name);
}
O NSSET apenas salva os IDs reais dos objetos indicados.