首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCompoundPredicate建设

NSCompoundPredicate建设
EN

Stack Overflow用户
提问于 2015-09-21 17:46:54
回答 2查看 455关注 0票数 0

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

代码语言:javascript
复制
<__NSArrayM 0x7ff7f3cd1040>(
    feedDay == 1,
    feedDay == 2,
    feedDay == 4
)

我需要和它一起使用这个statusPredicates数组:

代码语言:javascript
复制
<__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,但是我想不出如何将它和两个谓词数组放在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 18:52:30

在我看来,一个组合谓词,如

代码语言:javascript
复制
feedDay == 1 && feedDay == 2 ...

总是假的

因此,您可能的意思是将每个谓词与neutered条件组合,以便条件都为真(and),并将这些单独的组组合起来,从而使--这两种条件中的任何一种--都是真(or)。

如果将数组与and组合成一个大的复合,那么它肯定是假的。假设neutered条件总是相同的,

代码语言:javascript
复制
NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:
  @[[NSPredicate predicateWithFormat:@"is_neutered = 0"],
    [NSCompoundPredicate orPredicateWithSubPredicates:feedDays]]];

很难看,对吧?因此,我建议您使用feedDay的可能值创建一个数组,并使用简单的

代码语言:javascript
复制
[NSPredicate predicateWithFormat:
     @"is_neutered = 0 && feedDay in %@", allowedFeedDays]
票数 1
EN

Stack Overflow用户

发布于 2015-09-21 18:05:24

用这个代码-

代码语言:javascript
复制
NSMutableArray *allPredicates = [[NSMutableArray alloc] initWithArray:feedDays];
[allPredicates addObjectsFromArray:statusPredicates];

NSCompoundPredicate *finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:allPredicates];
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32701532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档