Ios 基于实体类对NSFetchRequest进行排序

Ios 基于实体类对NSFetchRequest进行排序,ios,core-data,nsfetchrequest,nssortdescriptor,Ios,Core Data,Nsfetchrequest,Nssortdescriptor,我使用的是CoreData,有两个子实体和一个通用的抽象超级实体,我们称它们为 SuperEntity, FirstSubEntity and SecondSubEntity 这三个实体都有自己的子类NSManagedObject或SuperEntity 我正在使用一个NSFetchRequest来获取类型为SuperEntity的所有对象,这意味着我将获得一组所有firstsubenties和secondsubenties都混在一起的对象。我想根据entity类对这个集合进行排序,如下所示

我使用的是CoreData,有两个子实体和一个通用的抽象超级实体,我们称它们为

SuperEntity,
FirstSubEntity and
SecondSubEntity
这三个实体都有自己的子类
NSManagedObject
SuperEntity

我正在使用一个
NSFetchRequest
来获取类型为
SuperEntity
的所有对象,这意味着我将获得一组所有
firstsubenties
secondsubenties
都混在一起的对象。我想根据entity类对这个集合进行排序,如下所示

我正在尝试使用键
class
设置一个
NSSortDescriptor

[NSSortDescriptor sortDescriptorWithKey:@"class" ascending:YES]
不幸的是,它抛出了一个异常

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

这很好用。关于如何使用
NSSortDescriptors
管理此问题的任何想法?

sectionNameKeyPath
中起作用,因为
sectionNameKeyPath
在对象加载到内存中后会被解析。
NSFetchRequest
及其排序描述符是在SQLite级别完成的,而键
class
是没有意义的

此外,在SQL级别,您的两个实体实际上位于同一个表中,因此无法区分它们,因此无法在此时对它们进行排序


唯一的解决方案是在内存中对它们进行排序,而不是直接在fetch中进行排序。您可以对从正常提取请求返回的数组使用
NSSortDescriptor
,在这种情况下,我将使用
entity.name
,而不是
class
,“它不再适用于iOS 10:'NSInvalidArgumentException',原因:'keypath entity.name未在entity“”Markus中找到,仍然可以按实体名称对结果进行排序吗?你有解决办法吗?
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext
                                      sectionNameKeyPath:@"class"
                                                acheName:nil];