gpt4 book ai didi

objective-c - Fetched results controller sectionIndexTitle 基于 transient 属性

转载 作者:行者123 更新时间:2023-11-28 22:43:17 26 4
gpt4 key购买 nike

我有一个核心数据实体“人”。我需要自定义部分索引标题,所以我想到创建 transient 属性,根据我自己的逻辑将数据分成一些特定的部分。但是,当我使用 fetchedResultsController 创建获取请求时,并保留此 transient 属性“sectionNameKeyPath”以初始化 fetchedResultsController sectionNameKeyPath。因此,我不得不将其作为第一个排序描述符的关键。但是,这会使应用程序崩溃。是否可以在 fetchedResultsController 中使用 transient 属性作为 sectionNameKeyPath

我的崩溃日志是。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath sectionNameKeyPath not found in entity <NSSQLEntity Person id=1>' 

最佳答案

您可以将 transient 属性用作获取结果 Controller 的 sectionNameKeyPath。但是您不能在排序描述符中使用 transient 属性。对于基于 SQLite 的核心数据存储,只能在排序描述符中使用非 transient 属性。

这记录在 Fetch Predicates and Sort Descriptors 中在《核心数据编程指南》中:

The SQL store, on the other hand, compiles the predicate and sort descriptors to SQL and evaluates the result in the database itself. This is done primarily for performance, but it means that evaluation happens in a non-Cocoa environment, and so sort descriptors (or predicates) that rely on Cocoa cannot work. The supported sort selectors are ...
In addition you cannot sort on transient properties using the SQLite store.

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

sectionNameKeyPath
...
If this key path is not the same as that specified by the first sort descriptor in fetchRequest, they must generate the same relative orderings. For example, the first sort descriptor in fetchRequest might specify the key for a persistent property; sectionNameKeyPath might specify a key for a transient property derived from the persistent property.

DateSectionTitles iOS 开发者库中的示例代码演示了其工作原理。

关于objective-c - Fetched results controller sectionIndexTitle 基于 transient 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com