是否可以在`NSFetchRequest`中按子类排序而不添加其他属性?

Ben*_*hen 7 iphone core-data nsfetchrequest ios

我想NSFetchRequest按实体对结果进行分组.实体都共享相同的抽象父级.例如:

animal
|
|-cat
|
|-dog
Run Code Online (Sandbox Code Playgroud)

NSFetchRequestincludesSubentities设定TRUEentity设定animal.它可以设置sectionNameKeyPathNSFetchedResultsController来的entity.name,但它是不可能做的一样sortDescriptors的的NSFetchRequest由于事实sortDescriptors是(在数据库中的数据,即,在不类方法)应用到存储的属性.因此,按实体类型分组的唯一方法是向超类添加属性,子类可以使用该属性来标识自己.

这似乎很疯狂,因为它破坏了继承的有用性.我查看了SQLite数据库,实体类型与属性存储在同一个表中,因此所需的数据已经存在.

总结:是否可以在NSFetchRequest不添加其他属性的情况下按子类排序?

ban*_*isa 2

我想答案是否定的。

获取和排序发生在存储中(对于 SQLLite 存储),因此属性需要成为数据模型的一部分。来自核心数据编程指南(持久存储功能):

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

此外,您无法使用 SQLite 存储对瞬态属性进行排序。