Chcel by som rýchlo vytvoriť svoj vyhľadávací panel a vyhľadávať vo viacerých poliach (zobrazených základných údajov) tabuľky. Použitý vyhľadávací modul je:
Let searchPredicate = NSPredicate(format: "(itemDate contains[c]
%@) OR (itemName contains[c] %@)", searchController.searchBar.text!,
searchController.searchBar.text!)
ItemDate je však typu NSDate a tento predikát zlyhá: „Nemožno použiť v / obsahuje operátor s kolekciou 2013-12-31 23:00:00 +0000 (nie kolekcia)“
let searchPredicate = NSPredicate(format: "(stringFromDate(itemDatum)
withFormat:@"ccc d MMMM y" contains[c] %@) OR (itemName contains[c] %@)",
searchController.searchBar.text!, searchController.searchBar.text!)
vráti „Nie je možné analyzovať názov funkcie„stringFromDate:“ do podporovaného selektora (stringFromDate :) „To bol samozrejme hlúpy odhad, ale moja otázka sa vďaka tomu stane pochopiteľnejšou: chcem, aby ľudia začali písať„ nov “alebo„ 2017 “a okamžite dosiahli správne výsledky, napríklad ako so strunami.
Akékoľvek rady sú vítané!
odpovede:
0 pre odpoveď č. 1Toto fungovalo pre mňa:
var searchPredicate: NSPredicate = NSPredicate { (AnyObject indx, NSDictionary bindings) -> Bool in
var itemN: String? = indx.valueForKey("itemName") as? String
var itemD: String = dateFormatter.stringFromDate(indx.valueForKey("itemDatum") as! NSDate)
var searchBarText: String = searchController.searchBar.text.lowercaseString
return itemN?.lowercaseString.rangeOfString(searchBarText) != nil || itemD.lowercaseString.rangeOfString(searchBarText) != nil
}