ios - 或者逻辑运算符在 [NSPredicate predicateWithFormat :] 中不起作用

标签 ios objective-c core-data nspredicate

我正在尝试过滤 Core Data 实体。

当尝试在 NSPredicate 中使用或 || 逻辑运算符时,出现谓词解析错误。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(dRIV_NAMESURNAME CONTAINS[cd] %@) || (vEHI_PLATE CONTAINS[cd] %@)"'

用这个过滤时,没问题:

NSPredicate* preFilter = 
   [NSPredicate predicateWithFormat:@"dRIV_NAMESURNAME CONTAINS[cd] %@", strSearch];

用这个过滤时,没问题:

NSPredicate* preFilter = 
   [NSPredicate predicateWithFormat:@"vEHI_PLATE CONTAINS[cd] %@", strSearch];

这给出了解析错误:

NSPredicate* preFilter = [NSPredicate predicateWithFormat:
   @"(dRIV_NAMESURNAME CONTAINS[cd] %@) || (vEHI_PLATE CONTAINS[cd] %@)",
   strSearch, strSearch];

最佳答案

你可以像这样使用NSCompoundPredicate

NSPredicate* filter1 = [NSPredicate predicateWithFormat:@"dRIV_NAMESURNAME CONTAINS[cd] %@", strSearch];

NSPredicate* filter2 = [NSPredicate predicateWithFormat:@"vEHI_PLATE CONTAINS[cd] %@", strSearch];

NSArray *searchFilters=@[filter1,filter2];

NSPredicate *compoundPredicate=[NSCompoundPredicate orPredicateWithSubpredicates:searchFilters];

关于ios - 或者逻辑运算符在 [NSPredicate predicateWithFormat :] 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524369/

相关文章:

ios - 在 Swift 中使用 Button 文本进行双重可选(??)和双重展开(!!)

ios - NoMethodError - 未定义的方法 `path' for nil :NilClass Cocoapods version 1. 0

iphone - 如何在设备之间同步核心数据?

objective-c - 当 UITextField 位于 UICollectionViewCell 内部时,它可以成为第一响应者吗?

iphone - NSPredicate 基于关系的内容

ios - fetchedResultsController fetchedObjects 返回 NSCFString 而不是 NSArray

ios - 检测底层 UITableViewCell 上的触摸并点击 UITextview 的属性文本

iOS - segue 和 tableView

javascript - 在 iPad/iPhone 上滚动时获取 scrollTop()

ios - 缩放使用 SKSpriteNodes 制作的钟摆