核心数据:匹配多个项目中多个项目的组合

时间:2018-09-28 21:41:45

标签: ios swift core-data nspredicate

编辑:忘了提一下,之后我会在Swift代码中过滤掉不需要颜色的卡片。

因此,这是另一个有关核心数据中的多个关系以及如何为其编写谓词的问题。简而言之,我想以一对多关系匹配多个项目的组合。

设置

  1. 颜色表,具有五种颜色:红色,绿色,白色,黑色,蓝色
  2. 卡片表,每张卡片与颜色表有一对多的关系

目标

搜索具有黑色和/或白色的卡,即:

  1. 卡可能仅仅黑
  2. 卡可能是仅白色
  3. 卡可能是黑白

到目前为止

最佳结果是(简体):

NSPredicate(format: "ANY color == Black") // Only black cards, good
NSPredicate(format: "ANY color == White") // Only white cards, good
NSPredicate(format: "ANY color == Black OR ANY color == White") // Only black AND white cards, bad

这里有一个与MySQL非常相似的帖子,以防它进一步澄清问题:

SQL: Make colors from color-table searchable

1 个答案:

答案 0 :(得分:1)

基于@pbasdf的评论,我提出了以下解决方案(在实际代码中具有更好的语法):

// Desired colors let includePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Black' OR $C == 'White').@count > 0”)

// Undesired colors let excludePredicate = NSPredicate(format: “SUBQUERY(color, $C, $C == 'Green' OR $C == 'Red' OR $C == 'Blue').@count == 0”)

// Combined to one predicate let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [includePredicate, excludePredicate]