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]
假设我在 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]