如何在 CoreData iOS 谓词构建器中多次传递相同的参数?
Posted
技术标签:
【中文标题】如何在 CoreData iOS 谓词构建器中多次传递相同的参数?【英文标题】:How to pass the same parameter multiple times in CoreData iOS predicate builder? 【发布时间】:2017-09-12 07:14:29 【问题描述】:我有一个 UITableView
和一个 UISearchbar
,让我可以根据来自 UISearchbar
的 search text
过滤数据。
CoreData
表包含 3 attributes
name, notes, date
我想根据 User
搜索文本在三列中搜索任何匹配项。
所以我试了一下:
let searchText = searchText.lowercased()
let query = "name contains[cd] %@ OR notes contains[cd] %@ OR date contains[cd] %@"
let predicate = NSPredicate(format: query, searchText, searchText, searchText)
有什么方法可以一次性传递同一个参数(searchText
)?
类似于Java
字符串格式化程序:
let query = "name contains[cd] %1$@ OR notes contains[cd] %1$@ OR date contains[cd] %1$@"
let predicate = NSPredicate(format: query, searchText)
【问题讨论】:
【参考方案1】:您可以使用替换变量:
let searchText = searchText.lowercased()
let template = NSPredicate(format: "name contains[cd] $SRCH OR notes contains[cd] $SRCH OR date contains[cd] $SRCH")
let subVars = ["SRCH": searchText]
let predicate = template.withSubstitutionVariables(subVars)
请参阅Apple Documentation 中的“使用谓词模板创建谓词”。
【讨论】:
sql injection
安全吗?
我想是的。格式字符串的解析主要在模板的初始创建中完成,因此与普通谓词格式字符串进行相同的检查。替换过程会将字符串括在引号中,以防止 sql 注入。以上是关于如何在 CoreData iOS 谓词构建器中多次传递相同的参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词