NSPredicate:如何在NSDate字段中使用CONTAINS?

时间:2015-08-19 15:54:20

标签: swift nspredicate

我想在swift中使用searchBar来搜索(核心数据填充)tableview的多个字段。我使用的searchPredicate是:

Let searchPredicate = NSPredicate(format: "(itemDate contains[c] 
%@) OR (itemName contains[c] %@)", searchController.searchBar.text!,
searchController.searchBar.text!)

但是,itemDate的类型为NSDate且此谓词失败:'无法使用收件人2013-12-31 23:00:00 +0000(不是收藏品)' ;

let searchPredicate = NSPredicate(format: "(stringFromDate(itemDatum)
withFormat:@\"ccc d MMMM y\" contains[c] %@) OR (itemName contains[c] %@)", 
searchController.searchBar.text!, searchController.searchBar.text!) 

返回'无法解析函数名称' stringFromDate:'进入受支持的选择器(stringFromDate :)'所以这是一个愚蠢的猜测,当然,但也许这使我的问题更容易理解:我希望人们开始打字' nov'或者' 2017'并立即得到适当的结果,就像字符串一样。

欢迎任何提示!

1 个答案:

答案 0 :(得分:0)

这对我有用:

 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
    }