在数组swift中搜索对象

时间:2015-04-29 10:21:39

标签: ios uitableview swift uisearchcontroller

我正在尝试使用UISearchController创建搜索功能。但是,我似乎无法使其与我的团队对象一起工作。我首先创建了一个包含id,name和shortname的Team Object。然后我从一个url中检索teamData,并将Team Objects添加到一个填充到tableView中的数组中。这个tableView包含一个searchController,它假设过滤数据,但没有任何反应。 阵列 var teamArray = Array< Team>() var filteredTableData = [String]() GetTeams功能 func getTeams(url:String){     isApiCalling = true     请求(.GET,url,参数:nil)         .response {(请求,响应,数据,错误)in             如果错误== nil {                 让数据:AnyObject =数据!                 让jsonArray = JSON(数据:数据为!NSData)                 for jsonArray中的(key:String,subJson:JSON){                         //创建一个对象并逐个解析JSON以将其附加到数组中                         var newTeamObject = Team(id:subJson [" id"]。intValue,name:subJson [" name"]。stringValue,shortname:subJson [" shortname"] 。字符串值)                         self.teamArray.append(newTeamObject)                 }                 self.isApiCalling = false                 self.tableView.reloadData()                 self.refreshControl?.endRefreshing()             }     } } 的cellForRowAtIndexPath override func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell {     让cell = tableView.dequeueReusableCellWithIdentifier(" teamCell",forIndexPath:indexPath)为! TeamCell     cell.textLabel?.font = UIFont(名称:" HelveticaNeue-Light",大小:20)     cell.textLabel?.text = self.teamArray [indexPath.row] .name as String     if(self.cellSelected.containsObject(indexPath)){         cell.accessoryView = cell.accessoryCheck     } else {         cell.accessoryView = cell.accessoryUncheck     }     返回细胞 } 筛选数据 func updateSearchResultsForSearchController(searchController:UISearchController) {     filteredTableData.removeAll(keepCapacity:false)     让searchPredicate = NSPredicate(格式:" SELF CONTAINS [c]%@",searchController.searchBar.text)     let array =(teamArray as NSArray).filteredArrayUsingPredicate(searchPredicate)     filteredTableData =数组为! [串]     self.tableView.reloadData() } 团队对象 班级队{   var id:Int!   var name:NSString!   var shortname:NSString! init(id:Int,name:NSString,shortname:NSString){     self.id = id     self.name = name     self.shortname =短名称 } }

2 个答案:

答案 0 :(得分:7)

teamArray中的对象没有SELF属性。您不能使用SELF一次搜索对象的所有属性。您必须提供属性的名称,如果要搜索多个属性,则必须将所有这些属性添加到谓词中。

我认为你可以在名字属性中搜索如下:

let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@", searchController.searchBar.text)

如果您需要更多属性,请执行以下操作:

let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@ OR shortname CONTAINS[c] %@", searchController.searchBar.text, searchController.searchBar.text)

答案 1 :(得分:2)

let searchPredicate = NSPredicate(format: "name contains[c] %@", searchWord)
self.filteredArray = self.array.filteredArrayUsingPredicate(searchPredicate)