如何按不相关的实体过滤核心数据

Posted

技术标签:

【中文标题】如何按不相关的实体过滤核心数据【英文标题】:How to filter Core Data by entities not in relationship 【发布时间】:2013-11-04 22:24:19 【问题描述】:

我有一个 NSManagedObject SchoolClass,它与学生有一个多对多的关系。当我想通过使用查找包含指定学生的 SchoolClasses 时,我可以使用它,

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(ANY students == %@)", student];

如何设置 NSPredicate 以返回不包含指定学生的 SchoolClasses 的 NSArray?我认为像下面这样的东西会起作用,但它不起作用。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(NONE students IN %@)", student];

【问题讨论】:

【参考方案1】:

IN 在右侧是一个集合时使用,例如学生数组。试试这个谓词:

[NSPredicate predicateWithFormat:@"(NONE students = %@)", student];

这也等价于ALL students != %@

这将只返回不包括指定学生的 SchoolClasses。

【讨论】:

感谢您的回复。我相信它正确地回答了我提出的问题。我犯了为这个问题简化我的 NSPredicate 示例的错误,所以不幸的是,对于我更复杂的逻辑(我没有在这个问题中提出),它没有按预期工作。此外,如果我尝试,@"(ALL students != %@)"... 它会崩溃并显示“不支持的谓词(null)”消息。我将使用我试图过滤的完整 NSPredicate 逻辑打开另一个问题。

以上是关于如何按不相关的实体过滤核心数据的主要内容,如果未能解决你的问题,请参考以下文章

嵌套核心数据获取

从出现在 NSPopUpButton 列表中的核心数据实体中过滤条目

核心数据过滤器抽象实体

iPhone如何使用NSPredicate按父实体过滤Core Data?

对许多实体和实体关系进行过滤的核心数据提取

按祖父母实体关系过滤核心数据