2017-02-22 98 views
0

我有一個應用程序,其中包含多個時間條目,並將日期另存爲NSDate。使用NSPredicate過濾fetchRequest年/月

我想使用一個獲取請求來篩選我從別的地方獲得的某個年份和月份。我如何使用NSPredicate過濾一年和一個月?

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

更新

使用幫助Raki酒指出,我想出了下面的代碼:

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: "date >= %@ AND date < %@", firstDayOfTheMonth as! CVarArg, beginningOfNextMonth as! CVarArg) 

我得到一個SIGABRT與以下消息:

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

Xcode建議我加「as! 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其開始月份的一天,

現在你需要簡單地這樣預測:

let predicate = NSPredicate(format: "%K >= %@ && %K <= %@", "DateAttribute", startDateOfMonth as NSDate, "DateAttribute", endDateOfMonth as NSDate) 

編輯:如果你不知道如何爲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」。像'startDateOfMonth as NSDate'' –

相關問題