Сортировать NSFetchRequest по предикату
У меня есть базовое хранилище данных, поддерживаемое SQLite, и я хочу получить список управляемых объектов, используя NSFetchRequest
, Я хочу, чтобы указанный список сортировался по логическому значению, которое можно легко рассчитать на уровне базы данных. Я знаю это, потому что можно сформулировать те же условия, используя NSPredicate
, который будет выглядеть следующим образом:
[NSPredicate predicateWithFormat:@"uid = %@", currentUID]
К сожалению, кажется, что нет способа сформулировать подобное условие, используя NSSortDescriptor
, Как мне лучше идти об этом? Получить два списка, один с
[NSPredicate predicateWithFormat:@"uid = %@", currentUID]
и один с
[NSPredicate predicateWithFormat:@"uid != %@", currentUID]
и объединить их позже? Могу ли я тогда еще элегантно использовать NSFetchedResultsController
?
Или я должен получить все элементы и отсортировать их позже в коде? Или я что-то пропустил?
2 ответа
Просто создайте массив (даже если он содержит только один элемент) NSSortDescriptors
отсортировать результат по желанию.
Ты используешь setSortDescriptors:
установить их.
Выборка может обрабатывать как предикаты, так и сортировку одновременно.
То, что вы просите, не имеет смысла.
Предикат используется для выбора объектов, которые должны быть возвращены в наборе результатов. Это определяется путем оценки предиката для каждого объекта, чтобы увидеть, оценивает ли предикат значение YES
или же NO
(двоичное значение или одно из 2 возможных значений). Если это оценивает YES
, то объект включен. Если это оценивает NO
, то объект исключается. Там нет никакого среднего.
В отличие от дескриптора сортировки оценивается less than
, equal
, или же greater than
, Другими словами, это троичное значение (это может быть одна из трех вещей). Невозможно выразить троичное значение с помощью предиката (поскольку предикат является двоичным), и поэтому использование предиката в качестве дескриптора сортировки не имеет абсолютно никакого смысла. API не позволяет этого, потому что логика не позволяет этого.
Итак, настоящий вопрос: что вы пытаетесь сделать? Как вы думаете, зачем вам нужен предикат в дескрипторах сортировки?