我有一系列的工作室。每个工作室都有一个名为studioName的属性。
我需要我的搜索字段来过滤工作室,基于studioName,由用户应用于搜索字段。
这是我目前的代码:
var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
print("SEARCH TEXT: \(searchText)")
if searchText == nil || searchText!.isEmpty {
studiosToDisplay = studios
self.resultTableView.reloadData()
NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
} else {
studiosToDisplay.removeAll()
let searchPredicate = NSPredicate(format: "studioName CONTAINS[c] %@", searchText!)
let array = (self.studios as NSArray).filteredArrayUsingPredicate(searchPredicate)
studiosToDisplay = array as! [Studio]
self.resultTableView.reloadData()
}
}
它现在只是不工作..它过滤了,但不管我放在搜索域中的什么,我每次都会留下相同的工作室。
我想我需要知道谓词,每次都必须查看数组中的单个对象。但我无法弄清楚如何。 我试图添加" ANY"在格式中,但崩溃我的应用程序。
答案 0 :(得分:7)
这是不必要的复杂。这里不需要NSPredicate
。
var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
print("SEARCH TEXT: \(searchText)")
if let searchText = searchText, !searchText.isEmpty {
studiosToDisplay = studios.filter{ $0.studioName.contains(searchText) }
}
else {
studiosToDisplay = studios
NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
}
self.resultTableView.reloadData()
}
答案 1 :(得分:1)
感谢@Alexander ..这是我最终使用的代码:
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
if let searchText = searchText {
if !searchText.isEmpty {
self.studiosToDisplay = self.studios.filter { $0.studioName!.containsString(searchText) }
for studio in self.studiosToDisplay {
print("\(studio.studioName!)")
}
}
else {
self.studiosToDisplay = self.studios
NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) // Calls SearchVC
}
}
self.resultTableView.reloadData()
}
我想通了,我以前的代码,NSPredicate实际上是功能性的 - 我只是在我的tableview中呈现错误的数组..糟糕..但现在它有效,我坚持使用更简单的代码。不知道为什么我没想到使用$ 0-function :) ..无论如何,谢谢!