首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多条件NSPredicate

多条件NSPredicate
EN

Stack Overflow用户
提问于 2014-09-03 03:59:17
回答 5查看 11.3K关注 0票数 17

我正在尝试创建一个具有多个条件的NSPredicate。我已经找到了几个解决方案,但它们似乎都与我的方法无关。我找到的最好看的一个在下面。

这是我的一个谓词方法,它工作得很好:

代码语言:javascript
运行
复制
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", 
searchText];
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate];

以下是我编辑的具有多个条件的版本。我不知道哪里出问题了。有什么想法吗?

代码语言:javascript
运行
复制
NSPredicate *p1 = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"businessArea contains[c] %@", 
searchText];

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p2]];
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate];
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-03 05:05:12

你可以试试这个

代码语言:javascript
运行
复制
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[p1, p2]];
票数 18
EN

Stack Overflow用户

发布于 2015-12-10 23:28:24

除了@Nikunj的答案之外,您还可以为您的和操作使用NSCompoundPredicate。

Obj和

代码语言:javascript
运行
复制
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2]];

Swift -和

代码语言:javascript
运行
复制
let predicate1:NSPredicate = NSPredicate(format: "X == 1")
let predicate2:NSPredicate = NSPredicate(format: "Y == 2")
let predicate:NSPredicate  = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate1,predicate2] )

Swift 3-和

代码语言:javascript
运行
复制
    let predicate1 = NSPredicate(format: "X == 1")
    let predicate2 = NSPredicate(format: "Y == 2")
    let predicateCompound = NSCompoundPredicate.init(type: .and, subpredicates: [predicate1,predicate2])
票数 12
EN

Stack Overflow用户

发布于 2014-09-03 04:57:59

在您发布的代码中没有什么问题,这意味着当您通过筛选数组来计算谓词时,可能会出现错误。

由于第一个谓词工作,问题在于businessArea密钥路径。

在以下情况下,筛选数组将引发异常:

  1. 数组中有一个没有businessArea值的对象(例如,它不是一个具有-businessArea方法的对象)
  2. 对象确实有一个businessArea值,但该值既不是NSString也不是nil
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25636007

复制
相关文章

相似问题

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