У меня есть приложение, которое имеет несколько записей времени с датой, сохраненной как NSDate.Фильтр fetchRequest для года/месяца с использованием NSPredicate
Я хотел бы использовать запрос на выборку для фильтрации в течение определенного года и месяца, которые я получаю из другого места. Как я могу использовать NSPredicate для фильтрации в течение года и месяца?
let predicate = NSPredicate(format: "%K == %D && %K == %D", ???, selectedMonth, ???, selectedYear)
Update
Используя помощь Рака указала, я придумал следующий код:
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 предложил добавить «как! CVarArg»
Update 2
Следующий предикат работал в настоящее время:
let predicate = NSPredicate(format: "%K >= %@ && %K < %@", "date", firstDayOfTheMonth! as NSDate, "date", beginningOfNextMonth! as NSDate)
Какой формат даты вы сохраняете? – raki
Я использую NSDate. В CoreData введите «Дата». – sidetrax
это может помочь: http://stackoverflow.com/questions/13262567/how-to-build-a-nspredicate-filtering-all-days-in-a-month-using-nsdate – raki