Нет, я просто не включил его во фрагмент. Я включил весь метод, если это проясняет ситуацию.

тоящее время я пытаюсь заполнить 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 :, но кажется, что сколько раз я получаю выборку, не имеет значения, но когда. По какой-то причине он использует мою сортировку только после изменения объектной модели.

Ответы на вопрос(3)

Ваш ответ на вопрос