2012-03-25 134 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 
相關問題