NSFetchRequest 谓词语法

Posted

技术标签:

【中文标题】NSFetchRequest 谓词语法【英文标题】:NSFetchRequest predicate syntax 【发布时间】:2010-07-18 20:44:08 【问题描述】:

我的核心数据模型中有一个名为Task 的实体。 Task 实体有一个名为date 的可转换属性。 date 属性的类是一个名为TDate 的类(它符合 NSCoding,因此是可转换的属性)。 TDate 有一个 NSInteger 类型的属性,称为 month

在我的NSFetchRequest 中,我想获取特定月份的所有Task 对象。我正在使用以下谓词:

[NSPredicate predicateWithFormat:@"date.month == 7"]

应该在 7 月份给我所有 Task 对象。但是,使用此谓词,不会返回获取的对象。我可以通过取出谓词来确认有 Task 对象的月份是 7(7 月)。我的谓词语法有问题吗?

谢谢

【问题讨论】:

【参考方案1】:

如果您使用的是 SQLite 后端,则无法搜索可转换属性。在 SQLite 后端,获取请求的谓词被转换为 SQL 并在 SQLite 引擎上执行。由于 SQLite 不了解 Cocoa,因此针对 SQLite 后端执行的谓词不能使用可转换属性。

如果您使用的是 XML、二进制或内存存储,则可以使用谓词查询可转换的属性,因为整个对象图都在内存中并使用本机 Cocoa 进行查询。

【讨论】:

我最终为date 对象的每个属性创建了单独的属性。谢谢。

以上是关于NSFetchRequest 谓词语法的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchRequest / 谓词问题

NSFetchRequest 谓词不一致 iOS (NSFetchedResultsController) 与 Mac (NSArrayController)

带有 NSdate 谓词的 NSFetchrequest

你如何构造 NSFetchRequest setHavingPredicate: 的谓词?

NSFetchRequest 具有一对一关系属性 == YES 谓词错误地获取每个实体

NSFetchRequest 返回具有 <invalid> 类型元素的数组