多属性列中的 Core Data NSPredicate 搜索

4

我想在酒店实体的两个属性(hotelName和cityName)中搜索关键字

我正在寻找酒店enter image description here

"The Kensington Studios"在hotelName属性中

"London"是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)

但是它返回的结果为空。 请指导我。

如果您输入酒店名称的完整单词,例如“Kensington”而不是“Kensing”,它是否有效? - Tom Harrington
请查看下面的答案,Lokesh。如果可以,请告诉我它是否有效。 - A K M Saleh Sultan
1个回答

2

words对象返回[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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接