2014-06-27 124 views
0

我有一个复杂的NSPredicate问题,我无法解决。NSPredicate complex查询

我的数据结构如下:

类别 - 有很多头衔

标题 - 有许多产品

标题 - 已latestProduct财产(title.latestProduct

标题可以通过排除排除财产(title.excluded = YES) 产品可以通过排除财产排除(product.excluded = YES

我要寻找的结果是:我需要获取系统中的所有类别清单,但是我想在排除类别:

  • 所有类别的标题被排除(category.titles.excluded == YES)

OR

  • 所有最新的产品被排除在外(category.titles.latestProduct.excluded == YES

或(和这对我来说是艰难的部分)

  • 的计数(category.titles.excluded == YES)和(category.titles.latestProduct.excluded == YES)数的总和等于类别冠军的次数(category.titles.count

我可以用简单的英语来描述我的问题,但无法找到将其作为谓词进行格式化的正确方法。任何帮助将不胜感激,谢谢!

+0

我会去与子查询(检查:http://stackoverflow.com/questions/9803971/subquery-in-nspredicate-and-nsinvalidargumentexception) – Larme

+0

我建议你做一个块的谓词,因为在块您可以轻松快速地创建如此复杂的查询。 – holex

+0

不幸的是块不会使用核心数据提取查询。至于子查询 - 我一直在使用它们,但不幸的是,我不知道如何将2个计数加在一起作为查询的最后部分 –

回答

0

所以我终于找出了使用ANY子句和子查询的组合的方法。谓词如下:

ANY productTitles.excluded == nil && SUBQUERY(productTitles, $x, SUBQUERY($x.products, $y, $y.excluded == nil)[email protected] != 0)[email protected] != 0 

我觉得子查询基本上是“ANY”的条款是如何工作的呢,但我无法弄清楚如何为一个子查询的子查询做一个ANY条款。