核心数据NSPredicate在多个属性列中进行搜索

时间:2017-04-05 19:16:14

标签: ios swift core-data predicate

我想在两个属性(hotelName& cityName)

中搜索酒店实体中的关键字

我正在寻找酒店enter image description here

" 肯辛顿工作室"在hotelName属性

"的伦敦"是cityName属性

在搜索栏中,如果我输入hotelName和cityName的中间位置(如下所示),则应识别并显示结果。 enter image description here

实现这一点,我就像

一样
let charSet = CharacterSet(charactersIn: " ") 
let words = searchText.components(separatedBy: charSet) 
let predicate = NSPredicate(format: "(hotelName IN %@) OR (cityName IN %@)", words, words)

但它给出了空洞的结果。

请指导我..

1 个答案:

答案 0 :(得分:0)

单词对象返回[String]数组。您必须使用数组的每个对象。所以代码应该像

let words = searchText.components(separatedBy: " ")
        
        var predicateArr = [NSPredicate]()
        for word in words! {
            let predicate = NSPredicate(format: "(hotelName contains [c]) OR (cityName contains [c])", word, word)
            predicateArr.append(predicate)
        }
        
        
        let compound = NSCompoundPredicate(orPredicateWithSubpredicates: predicateArr)
        let output = array.filtered(using: compound)