2017-09-12 88 views
1

我有一個UITableViewUISearchbar,讓我根據UISearchbarsearch text過濾數據。如何在CoreData iOS謂詞構建器中多次傳遞相同的參數?

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] %[email protected] OR notes contains[cd] %[email protected] OR date contains[cd] %[email protected]" 
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 「使用謂詞模板創建謂詞」。

+0

'sql injection'安全嗎? – wajeeh

+0

我這麼認爲。格式字符串的解析主要在模板的初始創建中完成,因此與正常謂詞格式字符串一樣受到相同的檢查。替換過程會將引號中的字符串括起來,以防止sql注入。 – pbasdf

相關問題