2017-02-22 8 views
0

날짜가 NSDate로 저장된 여러 시간 항목이있는 앱이 있습니다.NSPredicate를 사용하여 연도/월 필터 fetchRequest

내가 가져온 특정 날짜와 월을 필터링하기 위해 가져 오기 요청을 사용하고 싶습니다. NSPredicate를 사용하여 1 년 및 1 개월 동안 필터링하는 방법은 무엇입니까? 나는 SIGABRT를 얻을 수

let predicate = NSPredicate(format: "date >= %@ AND date < %@", firstDayOfTheMonth as! CVarArg, beginningOfNextMonth as! CVarArg) 

:

var dateComp = DateComponents() 
dateComp.year = Int(selectedYear) 
dateComp.month = Int(selectedMonth) 
dateComp.day = 1 

let calendar = Calendar.current 
let firstDayOfTheMonth = calendar.date(from: dateComp) 

var oneMonth = DateComponents() 
oneMonth.month = 1 
let beginningOfNextMonth = calendar.date(byAdding: oneMonth, to: firstDayOfTheMonth!) 

그리고 술어 :

let predicate = NSPredicate(format: "%K == %D && %K == %D", ???, selectedMonth, ???, selectedYear) 

업데이트

라키 (Raki)가 지적한 도움을 사용하여 다음 코드를 내놓았다 다음 메시지와 함께 :

Could not cast value of type 'Foundation.Date' (0x1073a0ae0) to 'Swift.CVarArg' (0x1196851c8). 

Xcode 제안 "추가! CVarArg "2

다음 술어는 이제 일

업데이트 :

let predicate = NSPredicate(format: "%K >= %@ && %K < %@", "date", firstDayOfTheMonth! as NSDate, "date", beginningOfNextMonth! as NSDate) 
+0

저장할 날짜의 형식은 무엇입니까? – raki

+0

NSDate를 사용하고 있습니다. CoreData에서 'Date'를 입력하십시오. – sidetrax

+0

도움이 될 수 있습니다. http://stackoverflow.com/questions/13262567/how-to-build-a-nspredicate-filtering-all-days-in-a-month-using-nsdate – raki

답변

0

당신은 다음과 같이 술어를 할 수는 없지만이 달의 하루를 시작하여 월과 연도에서 두 Dates을 만들 수 있으며, 종료일 :

이제는 이와 같이 술어 만 입력하면됩니다.

,988,

편집 : 당신이 startDateOfMonthendDateOfMonth를 위해 날짜를 만드는 방법을 모르는 경우, 당신은 DateComponents를 사용하여 만들 수 있습니다.

let selectedMonth = 11 
let selectedYear = 2015 
var components = DateComponents() 
components.month = selectedMonth 
components.year = selectedYear 
let startDateOfMonth = Calendar.current.date(from: components) 

//Now create endDateOfMonth using startDateOfMonth 
components.year = 0 
components.month = 1 
components.day = -1 
let endDateOfMonth = Calendar.current.date(byAdding: components, to: startDate!) 
+0

도와 주셔서 감사합니다. 나는 당신이 타이핑하는 동안 그것을 만들었다. : P 그러나 나는 components.day = -1을 좋아한다. 그걸 몰랐어. – sidetrax

+0

@ user7259583 지금 작동합니까, 원하는 결과를 얻고 있습니까? –

+0

@ user7259583 편집 된 응답과 'Date'를 'NSDate'로 변환하는 조건 자 유형으로 점검하십시오. like'startDateOfMonth as NSDate' –