NSFetchedResultsController ОШИБКА: извлеченный объект в индексе X имеет неправильное имя раздела Y. Объекты должны быть отсортированы по имени раздела - PullRequest
3 голосов
/ 07 июня 2011

Я реализую панель поиска в приложении iphone.У меня есть список работников, каждый из которых имеет атрибуты: firstName, lastName, company.Разделы табличного представления устанавливаются на атрибут компании.

Я установил предикат при поиске:

NSPredicate *predicate =[NSPredicate predicateWithFormat:@"firstName contains[cd] %@", searchBar.text];

и получаю ошибку:

NSFetchedResultsController ERROR: The fetched object at index 3 has an out of order section name 'company2. Objects must be sorted by section name'

когда у меня есть sortDescriptor:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 

Я заметил, что когда я изменяю его на

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName"` ascending:YES selector:@selector(caseInsensitiveCompare:)];

, теперь поиск работает без ошибок.Должен ли параметр initWithKey соответствовать имени атрибута в предикате?Я не понимаю.

1 Ответ

14 голосов
/ 07 июня 2011

Из документов NSFetchedResultsController:

Запрос на выборку должен содержать хотя бы один дескриптор сортировки.Если контроллер генерирует разделы, первый дескриптор сортировки в массиве используется для группировки объектов в разделы;его ключ должен совпадать с sectionNameKeyPath, или относительное упорядочение с использованием его ключа должно совпадать с использованием sectionNameKeyPath.

В вашем случае необходимо использовать два вида (в массиве). Элемент один долженсортировка по атрибуту названия компании, а второй элемент должен сортироваться по атрибуту lastName / firstName.

...