2012-03-25 4 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에서 NSPredicate와 NSArray의 NSDate 또는 날짜를 비교합니다. 스위프트 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 
관련 문제