目前我有一个搜索栏,可以按名称搜索JSON数据:
func updateSearchResultsForSearchController(searchController: UISearchController) {
self.filteredSearchResults.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: " SELF CONTAINS [c] %@", searchController.searchBar.text!)
let array = (self.channelArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredSearchResults = array as! [ChannelInfo]
self.tableView.reloadData()
}
过滤后的搜索结果应返回包含搜索到的名称的自定义类:
class ChannelInfo {
var logo: String
var channelName: String
var id: NSNumber
init(logo: String, channelName: String , id: NSNumber) {
self.logo = logo
self.channelName = channelName
self.id = id
}
}
目前,每当我使用搜索栏时,我都会收到错误消息:
Can't use in/contains operator with collection .ChannelInfo (not a collection)'
我假设它是因为自定义类包含字符串和NSNumber。任何解决此问题的信息都非常感谢!
答案 0 :(得分:1)
问题是您正在尝试搜索不支持contains
运算符的自定义对象。您必须搜索特定字段,例如
"channelName CONTAINS [c] %@"
此外,您必须ChannelInfo
延长NSObject
或将其声明为@objc
。 NSPredicate
使用Obj-C反射动态访问字段值。