是否有可能按“NSFetchRequest”中的子类进行sorting而不添加其他属性?

我想按实体NSFetchRequest的结果。 这些实体都共享相同的抽象父项。 例如:

 animal | |-cat | |-dog 

NSFetchRequest includesSubentitiesTRUEentity设置为animalNSFetchRequest 。 可以将sectionNameKeyPathentity.name设置为entity.name但由于sortDescriptors应用于存储的属性(即数据库中的数据,而不是方法),因此不可能对NSFetchRequest的sortDescriptors执行相同的操作类)。 因此按实体types分组的唯一方法是向超类添加一个属性,子类可以用来标识自己。

这看起来很疯狂,因为它破坏了inheritance的有用性。 我查看了SQLite数据库,实体types与属性存储在同一个表中,因此所需的数据已经就位。

总结:是否有可能通过NSFetchRequest的子类进行sorting而不添加其他属性?

我想答案是否定的。

抓取和sorting发生在商店(对于SQLLite商店),所以属性需要成为数据模型的一部分。 从核心数据编程指南(Persistent Store Features):

抓取和商店types之间有一些相互作用。 在XML,二进制和内存存储中,谓词和sorting描述符的评估在Objective-C中执行,可以访问所有Cocoa的function,包括NSString上的比较方法。 另一方面,SQL存储将谓词和sorting描述符编译为SQL,并在数据库本身中评估结果。 这主要是为了性能,但这意味着评估发生在非Cocoa环境中,所以依赖于Cocoa的sorting描述符(或谓词)无法工作。

另外,您不能使用SQLite存储对瞬态属性进行sorting。