Нет, я просто не включил его во фрагмент. Я включил весь метод, если это проясняет ситуацию.
тоящее время я пытаюсь заполнить UITableView в моем проекте из Core Data с помощью NSFetchedResultsController. Я использую пользовательский поиск с компаратором (хотя я также пробовал селектор и имел ту же проблему):
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;
Когда я захожу на эту вкладку, я регистрируюсь во всей программе и обнаружил, что NSFetchedResultsController даже не входит в блок компаратора при получении. Вместо этого он сортирует его с помощью некоторого метода сортировки по умолчанию.
Однако, если я удаляю и добавляю объект с objectName, он входит в блок компаратора и правильно сортирует таблицу.
Почему NSFetchedResultsController не сортирует, используя компаратор, пока модель управляемого объекта не будет изменена?
Примечания: я попытался также отключить кэширование и / или выполнить выборку в viewDidLoad :, но кажется, что сколько раз я получаю выборку, не имеет значения, но когда. По какой-то причине он использует мою сортировку только после изменения объектной модели.