Objective c 基于瞬态属性的控制器sectionIndexTitle获取结果

Objective c 基于瞬态属性的控制器sectionIndexTitle获取结果,objective-c,ios,core-data,Objective C,Ios,Core Data,我有一个核心数据实体“Person”。我需要自定义节索引标题,因此我考虑创建一个临时属性,根据我自己的逻辑将数据分隔成特定的节。但是,当我使用fetchedResultsController创建fetch请求,并保留此临时属性'sectionNameKeyPath'以初始化fetchedResultsController sectionNameKeyPath时。所以,我必须把它作为第一个排序描述符的键。但是,这会使应用程序崩溃。在fetchedResultsController中是否可以使用瞬态

我有一个核心数据实体“Person”。我需要自定义节索引标题,因此我考虑创建一个临时属性,根据我自己的逻辑将数据分隔成特定的节。但是,当我使用fetchedResultsController创建fetch请求,并保留此临时属性'sectionNameKeyPath'以初始化fetchedResultsController sectionNameKeyPath时。所以,我必须把它作为第一个排序描述符的键。但是,这会使应用程序崩溃。在fetchedResultsController中是否可以使用瞬态属性作为sectionNameKeyPath

我的失事记录是

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath sectionNameKeyPath not found in entity <NSSQLEntity Person id=1>' 
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体中找不到keypath sectionNameKeyPath”

对于获取的结果控制器,可以使用瞬态属性作为
sectionNameKeyPath
。但不能在排序描述符中使用瞬态属性。对于基于SQLite的核心数据存储,排序描述符中只能使用非瞬态属性

这在“核心数据编程指南”中有记录:

另一方面,SQL存储区编译谓词和排序 将描述符转换为SQL并在数据库本身中计算结果。 这主要是为了表现,但这意味着评估 在非Cocoa环境中发生,因此排序描述符(或 依赖Cocoa的谓词(谓词)无法工作。支持的排序 选择器是…
此外,不能使用SQLite存储对瞬态属性进行排序。

但是第一个排序描述符不必与sectionNameKeyPath相同,请参阅的文档

sectionNameKeyPath

如果此密钥路径与 fetchRequest中的第一个排序描述符,它们必须生成相同的排序描述符 相对顺序。例如,中的第一个排序描述符 fetchRequest可能指定持久属性的键; sectionNameKeyPath可以为瞬态属性指定一个键 从persistent属性派生

iOS开发人员库中的示例代码演示了这是如何工作的