Сортировать NSFetchRequest по предикату - PullRequest
3 голосов
/ 17 февраля 2011

У меня есть базовое хранилище данных на базе SQLite, и я хочу получить список управляемых объектов, используя NSFetchRequest. Я хочу, чтобы указанный список сортировался по логическому значению, которое можно легко рассчитать на уровне базы данных. Я знаю это, потому что можно сформулировать те же условия, используя NSPredicate, который будет выглядеть следующим образом:

[NSPredicate predicateWithFormat:@"uid = %@", currentUID]

К сожалению, похоже, нет способа сформулировать подобное условие, используя NSSortDescriptor. Как мне лучше идти об этом? Получить два списка, один с

[NSPredicate predicateWithFormat:@"uid = %@", currentUID]

и один с

[NSPredicate predicateWithFormat:@"uid != %@", currentUID]

и объединить их позже? Могу ли я тогда еще элегантно использовать NSFetchedResultsController?
Или я должен выбрать все элементы и отсортировать их позже в коде? Или я что-то пропустил.

Ответы [ 2 ]

0 голосов
/ 09 марта 2013

Просто создайте массив (даже если он содержит только один элемент) из NSSortDescriptors, чтобы отсортировать результат по желанию.

Вы используете setSortDescriptors: для их установки.fetch может одновременно обрабатывать и предикаты, и сортировку.

0 голосов
/ 17 февраля 2011

То, что вы просите, не имеет смысла.

Предикат используется для выбора объектов, которые должны быть возвращены в наборе результатов. Это определяется путем оценки предиката для каждого объекта, чтобы определить, оценивается ли предикат как YES или NO (двоичное значение или одно из 2 возможных значений). Если оно оценивается как YES, то объект включается. Если оно оценивается как NO, то объект исключается. Там нет среднего уровня.

Напротив, дескриптор сортировки оценивается как less than, equal или greater than. Другими словами, это троичное значение (это может быть одна из 3 вещей). Невозможно выразить троичное значение с помощью предиката (поскольку предикат является двоичным), и поэтому использование предиката в качестве дескриптора сортировки не имеет абсолютно никакого смысла. API не позволяет этого, потому что логика не позволяет этого.

Итак, настоящий вопрос: что вы пытаетесь сделать? Как вы думаете, зачем вам нужен предикат в дескрипторах сортировки?

...