在Swift中,如何使用NSPredicate在包含字符串和NSNumber的自定义类中进行搜索?

时间:2016-02-12 16:22:32

标签: ios swift uisearchbar nspredicate uisearchcontroller

目前我有一个搜索栏,可以按名称搜索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。任何解决此问题的信息都非常感谢!

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试搜索不支持contains运算符的自定义对象。您必须搜索特定字段,例如

"channelName CONTAINS [c] %@"

此外,您必须ChannelInfo延长NSObject或将其声明为@objcNSPredicate使用Obj-C反射动态访问字段值。