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