2012-03-25 132 views

回答

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]; 
+0

它存储为字符串。你拥有的谓词不会对它进行排序,它只会发现类似的匹配。我无权访问该字符串,因为我将谓词设置为核心数据获取请求。 – Snowman 2012-03-25 23:58:00

+0

据我所知,在谓词本身中没有办法做到这一点。我猜你必须执行提取请求,然后根据日期字符串手动排序结果。 – tronbabylove 2012-03-26 00:09:59

1

您需要首先将其转换为NSDate,您可以使用NSPredicate的predicateWithBlock函数实现该转换。转换对象并在谓词块中对其进行测试。我从来没有亲自使用它,所以这个答案是理论上的。

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 
相关问题