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