我想知道是否有使用按日期排序的NSPredicate
来过滤集合,其中日期是NSString
(即3月24日)格式的MMMM dd
(它不是NSDate )。
答案 0 :(得分:4)
如果您将日期作为字符串存储在CoreData中,则谓词很简单。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"theDate like %@", theDateString];
但我猜测日期存储为NSDate对象。请查看使用NSDateFormatter将您的字符串转换为NSDate。
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMMM dd"];
NSDate* theDate = [df dateFromString:theDateString];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SomeDate >= %@", theDate];
答案 1 :(得分:1)
首先需要将其转换为NSDate,您可以使用NSPredicate的predicateWithBlock函数实现。转换对象并在谓词块中对其进行测试。我从来没有亲自使用它,所以这个答案是理论上的。
答案 2 :(得分:0)
将NSArray中的NSDate或日期与Swift中的NSPredicate进行比较。
在Swift 2.1或2.0中:
//format data
let Formata_Data = NSDateFormatter()
Formata_Data.calendar = NSCalendar.currentCalendar()
Formata_Data.dateFormat = "dd/MM/yyyy"
let _data_filtro = Formata_Data.stringFromDate(dias_filtros!)
let _data_hoje = Formata_Data.stringFromDate(NSDate())
let data_filtro_ns = Formata_Data.dateFromString(_data_filtro)
print("DATA.... \(_data_filtro)")
var predicate_Data = NSPredicate(block: { (data_string, Orcs) -> Bool in
return data_filtro_ns?.earlierDate(Formata_Data.dateFromString(data_string) as! String)!) == data_filtro_ns
})
var array_filtro_dias = Orcamentos.filteredArrayUsingPredicate(predicate_Data)
Orcamentos = array_filtro_dias