NSSortDescriptor в порядке убывания

Я использую FetchedResultsController для выполнения выборки и хочу, чтобы он сортировал объекты в порядке убывания. Если я использую пользовательский блок компаратора при создании NSSortDescriptor, я получаю сообщение об ошибке 'unsupported NSSortDescriptor (comparator blocks are not supported)'. Я не хочу извлекать свои элементы и сохранять их в массиве, сортировать их, а затем использовать, потому что это противоречит цели использования FetchedResultsController. Как я могу создать NSSortDescriptor, который будет сортироваться по убыванию?

Кроме того, почему в структуре для NSSortDescriptor есть метод, который позволяет использовать блок компаратора, если он фактически не позволяет его использовать? Или просто вы не можете использовать их для fetchrequests?


person user1529956    schedule 20.09.2013    source источник


Ответы (1)


Блочный метод NSSortDescriptor не поддерживается хранилищами sqlite. Документация по постоянному хранилищу (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html) содержит следующее:

Хранилище SQL, с другой стороны, компилирует предикаты и дескрипторы сортировки в SQL и оценивает результат в самой базе данных. Это сделано в первую очередь для производительности, но это означает, что оценка происходит в среде, отличной от Cocoa, и поэтому дескрипторы сортировки (или предикаты), которые полагаются на Cocoa, не могут работать.

Вам нужно будет использовать метод -[NSSortDescriptor sortDescriptorWithKey:ascending:].

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

person Damien Pontifex    schedule 20.09.2013
comment
Я понимаю. Спасибо. Итак, как я могу получить убывающий порядок моих извлеченных объектов? - person user1529956; 21.09.2013
comment
Для вашего NSFetchRequest NSFetchedResultsController: просто введите fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@myKey восхождение: NO]]; где @myKey - это ключ, который вы хотите отсортировать по убыванию - person Damien Pontifex; 21.09.2013
comment
@dmpontikfex вау, спасибо! Не могу поверить, что я не пробовал. Я думал, что установка возрастания как НЕТ приведет к случайному порядку в зависимости от порядка извлечения объектов. - person user1529956; 21.09.2013
comment
Спасибо, документы Apple иногда действительно раздражают. ДА, если получатель указывает сортировку по возрастанию, иначе НЕТ. - person Jeremy; 02.01.2014