NSCompoundPredicate 构造

NSCompoundPredicate construction

假设我在 feedDays 数组中有这个谓词数组:

<__NSArrayM 0x7ff7f3cd1040>(
    feedDay == 1,
    feedDay == 2,
    feedDay == 4
)

我需要将它与这个 statusPredicates 数组进行运算:

<__NSArrayM 0x7ff7f3cd1070>(
    is_neutered == 0 AND other_status == 0,
    is_neutered == 0 AND other_status == 1,
    is_neutered == 0 AND other_status == 2,
    is_neutered == 0 AND other_status == 3,
)

如何将这些组合成一个查询?我假设我必须使用 NSCompoundPredicate 但我无法弄清楚如何将它与两个谓词数组一起使用。

使用此代码 -

NSMutableArray *allPredicates = [[NSMutableArray alloc] initWithArray:feedDays];
[allPredicates addObjectsFromArray:statusPredicates];

NSCompoundPredicate *finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:allPredicates];

在我看来,组合谓词如

feedDay == 1 && feedDay == 2 ...

始终为 false

因此,您的意思可能是将每个谓词与 neutered 条件结合起来,以便 两个 条件都为真 (and),然后将这些结合起来个别组,以便 其中之一 为真 (or)。

如果将数组与 and 组合成一个大复合体,则它必然始终为 false。假设neutered条件始终相同,

NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:
  @[[NSPredicate predicateWithFormat:@"is_neutered = 0"],
    [NSCompoundPredicate orPredicateWithSubPredicates:feedDays]]];

这很丑,对吧?所以我建议您创建一个数组,其中包含 feedDay 的可能值并使用简单的

[NSPredicate predicateWithFormat:
     @"is_neutered = 0 && feedDay in %@", allowedFeedDays]