2014-01-08 5 views
0

Я использую CoreData и два суб-объекты с общей абстрактной супер-субъекта, давайте назовем ихСортировка NSFetchRequest на основе объекта класса

SuperEntity, 
FirstSubEntity and 
SecondSubEntity 

Все три организации имеют свой собственный подкласс NSManagedObject или SuperEntity.

Я использую NSFetchRequest для извлечения всех объектов типа SuperEntity, то есть я буду получать множество всех FirstSubEntities и SecondSubEntities все перемешаны вместе. Я хочу сортировать этот набор на основе класса сущности, как это.

  • <FirstSubEntity id=X>
  • <FirstSubEntity id=X>
  • <FirstSubEntity id=X>
  • ...
  • <SecondSubEntity id=X>
  • <SecondSubEntity id=X>
  • ...

Я пытаюсь установить NSSortDescriptor с ключом class:

[NSSortDescriptor sortDescriptorWithKey:@"class" ascending:YES] 

К сожалению, он бросает исключение

'NSInvalidArgumentException', reason: 'keypath class not found in entity <NSSQLEntity SuperEntity id=X>' 

Любопытно, что если я вместо того, чтобы использовать NSFetchedResultsController я могу установить на имя раздела class

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
            managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext 
             sectionNameKeyPath:@"class" 
               acheName:nil]; 

Какой из них прекрасно работает. Любые идеи о том, как управлять этим с помощью NSSortDescriptors?

ответ

3

Это работает в sectionNameKeyPath, потому что sectionNameKeyPath разрешен после загрузки объектов в память. NSFetchRequest и его дескрипторы сортировки выполняются на уровне SQLite, который ключ class не имеет смысла.

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

Ваше единственное решение - сортировать их в памяти, а не непосредственно в выборке. Вы можете использовать NSSortDescriptor против возвращаемого массива из обычного запроса на выборку, и в этом случае я бы использовал entity.name вместо class. не

+0

«Он больше не работает прошивкой 10:„NSInvalidArgumentException“, причина:„Ключевой путь entity.name не найден в сущности “» Маркус, это еще можно сортировать результаты по имя сущности? У тебя есть решение? – Yarlik

Смежные вопросы