基于瞬态属性获取的结果控制器 sectionIndexTitle
Posted
技术标签:
【中文标题】基于瞬态属性获取的结果控制器 sectionIndexTitle【英文标题】:Fetched results controller sectionIndexTitle based on transient attributes 【发布时间】:2012-12-14 10:55:53 【问题描述】:我有一个核心数据实体“人”。我需要自定义部分索引标题,所以我想创建瞬态属性,根据我自己的逻辑将数据分成一些特定的部分。但是,当我使用 fetchedResultsController 创建获取请求时,并保留此临时属性“sectionNameKeyPath”以初始化 fetchedResultsController sectionNameKeyPath。所以,我不得不把它作为第一个排序描述符的关键。但是,这会使应用程序崩溃。是否可以在 fetchedResultsController 中使用瞬态属性作为 sectionNameKeyPath
我的崩溃日志是。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath sectionNameKeyPath not found in entity <NSSQLEntity Person id=1>'
【问题讨论】:
【参考方案1】:您可以将瞬态属性作为sectionNameKeyPath
用于获取的结果控制器。但是您不能在排序描述符中使用瞬态属性。对于基于 SQLite 的 Core Data 存储,只能在排序描述符中使用非瞬态属性。
这在“核心数据编程指南”中的Fetch Predicates and Sort Descriptors 中有记录:
另一方面,SQL 存储编译谓词并排序 描述 SQL 并评估数据库本身的结果。 这主要是为了性能,但这意味着评估 发生在非 Cocoa 环境中,因此排序描述符(或 依赖于 Cocoa 的谓词)不能工作。支持的排序 选择器是...此外,您不能使用 SQLite 存储对瞬态属性进行排序。
但第一个排序描述符不必与sectionNameKeyPath相同,参见initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:的文档
sectionNameKeyPath ... 如果此密钥路径与指定的路径不同 fetchRequest 中的第一个排序描述符,它们必须生成相同的 相对顺序。例如,第一个排序描述符 fetchRequest 可能会指定持久属性的键; sectionNameKeyPath 可能为瞬态属性指定一个键 派生自持久属性。
ios 开发者库中的DateSectionTitles 示例代码演示了它是如何工作的。
【讨论】:
以上是关于基于瞬态属性获取的结果控制器 sectionIndexTitle的主要内容,如果未能解决你的问题,请参考以下文章
Pandas使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe