2012-03-25 22 views

答えて

4

日付を文字列としてCoreDataに格納する場合、述語は単純です。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"theDate like %@", theDateString]; 

しかし、私は日付がNSDateオブジェクトとして格納されていると推測しています。文字列をNSDateに変換するにはNSDateFormatterを使用してください。

NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MMMM dd"]; 
NSDate* theDate = [df dateFromString:theDateString]; 
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SomeDate >= %@", theDate]; 
+0

それは文字列として保存されています。あなたが持っている述語はそれをソートしません。私はコアデータのフェッチ要求に述語を設定しているため、文字列へのアクセス権がありません。 – Snowman

+0

私が知る限り、述語自体でこれを行う方法はありません。フェッチ要求を実行し、日付文字列に基づいて手動で結果を並べ替える必要があると思います。 – tronbabylove

1

あなたはNSPredicateのpredicateWithBlock機能を実現することができ、最初のNSDateに変換する必要があります。オブジェクトを変換し、述語ブロックでテストします。私は個人的に使ったことがないので、この答えは理論的です。

0

SwiftのNSArrayとNSArrayのNSPredicateを比較します。スイフト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 
関連する問題