我正在尝试创建一个具有多个条件的NSPredicate。我已经找到了几个解决方案,但它们似乎都与我的方法无关。我找到的最好看的一个在下面。
这是我的一个谓词方法,它工作得很好:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[c] %@",
searchText];
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate];
以下是我编辑的具有多个条件的版本。我不知道哪里出问题了。有什么想法吗?
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];
发布于 2014-09-03 05:05:12
你可以试试这个
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[p1, p2]];
发布于 2015-12-10 23:28:24
除了@Nikunj的答案之外,您还可以为您的和操作使用NSCompoundPredicate。
Obj和
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2]];
Swift -和
let predicate1:NSPredicate = NSPredicate(format: "X == 1")
let predicate2:NSPredicate = NSPredicate(format: "Y == 2")
let predicate:NSPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate1,predicate2] )
Swift 3-和
let predicate1 = NSPredicate(format: "X == 1")
let predicate2 = NSPredicate(format: "Y == 2")
let predicateCompound = NSCompoundPredicate.init(type: .and, subpredicates: [predicate1,predicate2])
发布于 2014-09-03 04:57:59
在您发布的代码中没有什么问题,这意味着当您通过筛选数组来计算谓词时,可能会出现错误。
由于第一个谓词工作,问题在于businessArea
密钥路径。
在以下情况下,筛选数组将引发异常:
businessArea
值的对象(例如,它不是一个具有-businessArea
方法的对象)businessArea
值,但该值既不是NSString
也不是nil
。https://stackoverflow.com/questions/25636007
复制相似问题