A classificação personalizada NSFetchedResultsController não está sendo chamada
Atualmente, estou tentando preencher um UITableView no meu projeto a partir do Core Data usando NSFetchedResultsController. Estou usando uma pesquisa personalizada com um comparador (embora eu também tenha tentado um seletor e tenha um problema idêntico):
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"objectName" ascending:YES comparator:^(id s1, id s2) {
NSLog(@"Comparator");
//custom compare here with print statement
}];
NSLog(@"Sort Descriptor Set");
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"firstLetterOfObject" cacheName:@"Objects"];
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
if (![fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController;
Quando entro nessa guia, efetuei logon em todo o programa e descobri que o NSFetchedResultsController nem mesmo entra no bloco comparador ao buscar. Em vez disso, classifica-o com algum método de classificação padrão.
Se eu excluir e adicionar um Objeto com um objectName, no entanto, ele inserirá o bloco comparador e classificará a tabela corretamente.
Por que o NSFetchedResultsController não classifica usando o comparador até que o modelo de objeto gerenciado seja alterado?
Notas: Tentei também desativar o cache e / ou realizar uma busca em viewDidLoad :, mas parece que quantas vezes busco não importa, mas quando. Por alguma razão, ele só usa minha classificação depois que o modelo de objeto foi alterado.