我有一個應用程序,其中包含多個時間條目,並將日期另存爲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)
什麼是您保存日期的格式? – raki
我正在使用NSDate。在CoreData中鍵入'Date'。 – sidetrax
它可能有所幫助:http://stackoverflow.com/questions/13262567/how-to-build-a-nspredicate-filtering-all-days-in-a-month-using-nsdate – raki