/ / NSPredicate: ako používať OBSAHUJE s poľom NSDate? - svižný, nspredikát

NSPredicate: ako používať OBSAHU s poľom NSDate? - rýchle, npredpovedajúce

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ď č. 1

Toto 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
}