Сортировка выбранного контроллера результатов, пустые строки в последнюю очередь

Допустим, у меня есть Person сущность в хранилище основных данных. у меня есть UITableView населенный NSFetchedResultsController это показывает каждый Person юридическое лицо. Естественно, что Person сущность имеет name свойство, которое не является обязательным. Мы хотим отобразить список в алфавитном порядке, AZ. Пользователи, которые видят это, хотят в первую очередь взглянуть на именованных людей, так как именно они будут более интересны. Таким образом, дескриптор сортировки, который контроллер берет в своем инициализаторе, должен показать Person объекты с ненулевыми именами, а затем с нулевыми.

Мои варианты ограничены. Мне разрешено использовать только некоторые компараторы, которые предоставляются на NSString при попадании в базу данных, ни один из которых не соответствует моим критериям. Я не могу отсортировать переходные значения. Я попытался использовать пробелы нулевой ширины в качестве значения по умолчанию, но Core Data, очевидно, удаляет пробелы. Мысли?

1 ответ

Разделы в fetchedResultsController не обязательно должны соответствовать один к одному с разделами, которые вы отображаете в табличном представлении. Прямо сейчас у вас есть разделы что-то вроде (ноль), A, B, C, D,... и т. Д. Но вы можете изменить то, как ваш контроллер представления выбирает отображение разделов. Установите секцию 0 в вашем табличном представлении, смотрите секцию 1 в fetchedResultsController и 1->2, 2->3... до тех пор, пока последняя секция (секция без имен) не укажет на секцию 0.

Это не так сложно, но это может добавить беспорядок в ваш код. Поэтому я бы порекомендовал создать отдельный объект, который имеет дело с преобразованием fetchedResultsController indexPaths и разделов в indexPaths и разделы вашего табличного представления. (Также убедитесь, что имеете дело с тем, что нет раздела "без имени", и когда есть только раздел "без имени").

Если это кажется слишком сложным, более простым решением было бы добавить свойство hasName и отсортировать по первому. Сделайте пользовательский установщик имени человека, который также установит hasName свойство, чтобы вы могли легко сохранить это свойство в синхронизации.

Другие вопросы по тегам