Ich habe eine Reihe von Studios. Jedes Studio hat eine Eigenschaft namens studioName.Filter Array von Objekten auf Eigenschaft mit NSPredicate
Ich brauche mein Suchfeld, um die Studios basierend auf dem studioName zu filtern, die vom Benutzer auf das Suchfeld angewendet wurden.
Hier ist mein aktueller Code:
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()
}
}
Es ist einfach nicht Weicht arbeiten, gerade jetzt .. Es filtert, aber ich am Ende mit dem gleichen Studio jedes Mal verlassen, egal, was ich im Suchfeld setzen.
Ich denke, ich muss das Prädikat wissen, dass es jedes Mal auf das einzelne Objekt im Array schauen muss. Aber ich kann einfach nicht herausfinden, wie. Ich habe versucht, "ANY" in dem Format hinzuzufügen, aber das stürzt meine App ab.
Sie sollten Ihre Frage richtig markieren, da Sie Swift 2 zu verwenden scheinen (ich empfehle Ihnen, Ihren Xcode auf den neuesten im App Store erhältlichen Xcode zu aktualisieren) –
Eine Randnotiz: Mit 'searchText == nil' nach nil suchen , dann force unwrapping ('searchText!') ist wirklich eine schlechte Übung – Alexander