NSCompoundPredicate建设

时间:2015-09-21 17:46:55

标签: ios objective-c core-data nsfetchedresultscontroller nscompoundpredicate

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

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

我需要与此statusPredicates数组进行AND运算:

<__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,但我无法弄清楚如何将它与两个谓词数组一起使用。

2 个答案:

答案 0 :(得分:1)

在我看来,像

这样的组合谓词
feedDay == 1 && feedDay == 2 ...

始终为假

因此,您可能意味着将每个谓词与neutered条件相结合,以便两个条件都为真(and),并将这些单独的组合起来,以便< strong> 这些都是真的(or)。

如果将数组与一个大的化合物and组合在一起,它必然总是错误的。假设neutered条件始终相同,

NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:
  @[[NSPredicate predicateWithFormat:@"is_neutered = 0"],
    [NSCompoundPredicate orPredicateWithSubPredicates:feedDays]]];
那是非常难看的,对吗?因此,我建议您使用feedDay的可能值创建一个数组,并使用简单的

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

答案 1 :(得分:-1)

使用此代码 -

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

NSCompoundPredicate *finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:allPredicates];