NSPredicate具有多种条件

Bra*_*don 15 objective-c nspredicate ios

我正在尝试创建具有多个条件的NSPredicate.我找到了几个解决方案,但它们似乎都没有使用我的方法.我发现的最好看的是下面.

这是我的单一谓词方法,它运行得很好:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", 
searchText];
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

这是我编辑的多个条件版本.我不确定什么是错的.有任何想法吗?

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];
Run Code Online (Sandbox Code Playgroud)

小智 17

你可以试试这个

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[p1, p2]];
Run Code Online (Sandbox Code Playgroud)


Onu*_*Var 9

除了@Nikunj的答案,你还可以使用NSCompoundPredicate进行这样的AND操作.

Obj-C - AND

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2]];
Run Code Online (Sandbox Code Playgroud)

斯威夫特 - 和

let predicate1:NSPredicate = NSPredicate(format: "X == 1")
let predicate2:NSPredicate = NSPredicate(format: "Y == 2")
let predicate:NSPredicate  = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate1,predicate2] )
Run Code Online (Sandbox Code Playgroud)

斯威夫特3 - 和

    let predicate1 = NSPredicate(format: "X == 1")
    let predicate2 = NSPredicate(format: "Y == 2")
    let predicateCompound = NSCompoundPredicate.init(type: .and, subpredicates: [predicate1,predicate2])
Run Code Online (Sandbox Code Playgroud)