基于瞬态属性提取结果控制器sectionIndexTitle
我有一个核心数据实体'Person'。 我需要自定义部分索引标题,所以我想创建瞬态属性的单独的数据根据我自己的逻辑的特定部分。 但是,当我使用fetchedResultsController创建获取请求时,并且保留此瞬态属性'sectionNameKeyPath'以初始化fetchedResultsController sectionNameKeyPath。 所以,我不得不把它作为第一个排序描述符的关键。 但是,这会使应用程序崩溃。 是不是可以使用transient属性作为fetchedResultsController中的sectionNameKeyPath
我的崩溃日志是。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath sectionNameKeyPath not found in entity <NSSQLEntity Person id=1>'
您可以使用临时属性作为sectionNameKeyPath
来获取结果控制器。 但是你不能在排序描述符中使用transient属性。 对于基于SQLite的Core Data存储,只能在排序描述符中使用非瞬态属性。
这在“核心数据编程指南”中的提取谓词和排序描述符中有描述:
另一方面,SQL存储将谓词和排序描述符编译为SQL,并在数据库本身中评估结果。 这主要是为了性能,但这意味着评估发生在非Cocoa环境中,因此对依赖Cocoa的描述符(或谓词)进行排序无法工作。 支持的排序选择器是...
另外,您不能使用SQLite存储对瞬态属性进行排序。
但是第一个排序描述符不必与sectionNameKeyPath相同,请参阅initWithFetchRequest的文档:managedObjectContext:sectionNameKeyPath:cacheName:
sectionNameKeyPath
...
如果此关键路径与fetchRequest中第一个排序描述符指定的关键路径不同,则它们必须生成相同的相关排序。 例如,fetchRequest中的第一个排序描述符可以指定持久属性的关键字; sectionNameKeyPath可能会为持久属性派生的瞬态属性指定一个键。
iOS开发者库中的DateSectionTitles示例代码演示了这是如何工作的。
链接地址: http://www.djcxy.com/p/36121.html上一篇: Fetched results controller sectionIndexTitle based on transient attributes