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

Posted

技术标签:

【中文标题】NSFetchRequest 谓词不一致 iOS (NSFetchedResultsController) 与 Mac (NSArrayController)【英文标题】:NSFetchRequest predicate inconsistency iOS (NSFetchedResultsController) vs Mac (NSArrayController) 【发布时间】:2015-05-24 02:55:43 【问题描述】:

在使用 NSFetchRequest 和谓词包含由对象类定义的属性而不是实体属性的一部分时,ios 上的 NSFetchedResultsController 和 Mac 上的 NSArrayController 之间存在不一致。

考虑由类 Foo 实现的托管对象实体 Foo。 Foo 包含一个属性 BOOL isFoo,该属性由 Foo 类实现,但不受属性支持(即不是实体 Foo 架构的一部分)。现在在 NSArrayController 的谓词中使用 isFoo 作为条件就可以了。有人会假设这意味着谓词在获取对象后应用于对象,因此命中对象类。但是,在 iOS 上,使用相同的谓词会导致 isFoo 的 NSInvalidArgumentException 未找到。在 iOS 上,谓词似乎在创建 Foo 对象之前在 NSSQLEntity 对象上进行了评估。

需要一个相当具体的跨平台项目来展示这一点,但我还没有找到说明这种差异的文档。

【问题讨论】:

【参考方案1】:

在我的具体情况下,有问题的属性只是实体中存在的属性的包装器,因此我可以专门针对 iOS 修改我的谓词。然而,在一般情况下,这可能是 NSFetchedResultsController 的主要限制。

【讨论】:

以上是关于NSFetchRequest 谓词不一致 iOS (NSFetchedResultsController) 与 Mac (NSArrayController)的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchRequest / 谓词问题

NSFetchRequest 谓词语法

带有 NSdate 谓词的 NSFetchrequest

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

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

带有谓词的 ios 核心数据错误