ios - NSPredicate 格式问题

标签 ios swift nspredicate

我正在创建一个 iOS 应用程序,我希望用户能够通过 UITableView 进行搜索并根据各种不同的输入显示结果。我正在使用 NSPredicate 来执行此操作,其中多个条件由“OR”分隔,但出于某种原因,它仅使用第一个条件进行搜索,而没有其他条件。

这是我的 NSPredicate 的格式:

let searchPredicate = NSPredicate(format: "(SELF.firstName CONTAINS[c]
%@) OR (SELF.lastName CONTAINS[c] %@) OR (SELF.major CONTAINS[c] %@) OR
(SELF.year CONTAINS[c] %@) OR (SELF.gpa CONTAINS[c] %@)",
searchController.searchBar.text!)

我的参数是 firstName、lastName、major、year 和 gpa。当我在搜索栏中输入除名字以外的任何内容时,没有显示任何结果。但是输入名字确实会返回匹配项。为什么会这样?我的 NSPredicate 格式不正确吗?

最佳答案

您的谓词中有五个 %@ 格式说明符实例,因此您需要传递五个值。你只超过了一个。

您需要重复 searchController.searchBar.text! 五次。顺便说一句 - 将其分配给一个安全解包的变量并重复该变量五次。它会减少打字。

if let srch = searchController.searchBar.text {
    let searchPredicate = NSPredicate(format: "(SELF.firstName CONTAINS[c] %@) OR
        (SELF.lastName CONTAINS[c] %@) OR
        (SELF.major CONTAINS[c] %@) OR
        (SELF.year CONTAINS[c] %@) OR
        (SELF.gpa CONTAINS[c] %@)", srch, srch, srch, srch, srch)
    ...
}

关于ios - NSPredicate 格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856983/

相关文章:

ios - 核心数据 - NSManagedObjectContext 与 NSFetchedResultsController

ios - 如何使用 AVPlayer 擦洗音频?

ios - 处理硬编码列表/选项/下拉列表等的合法方法

ios - 使用 SWIFT 在 Tableview 中设置自定义单元格

ios - 视觉格式自动布局中的灵活大小元素如何决定使用哪个谓词

swift - 不要从 NumberFormatter 获取货币符号

ios - 有没有一种方法可以直接访问 UICollectionView 元素而无需重新加载?

ios - 过滤/搜索 NSMutableDictionary

iphone - 核心数据 ANY BETWEEN 谓词

ios - NSPredicate 获取低于指定值的最大值