У меня есть модель Core Data со NSDate
свойством. Я хочу фильтровать базу данных по дням. Я предполагаю, что решение будет включать в себя NSPredicate
, но я не уверен, как все это собрать.
Я знаю, как сравнить день из двух NSDate
с использованием NSDateComponents
и NSCalendar
, но как мне отфильтровать его с помощью NSPredicate
?
Возможно, мне нужно создать категорию в моем NSManagedObject
подклассе, которая может возвращать голую дату только с годом, месяцем и днем. Тогда я мог бы сравнить это в файле NSPredicate
. Это ваша рекомендация или есть что-то попроще?
objective-c
core-data
nsdate
nspredicate
nsfetchedresultscontroller
Джонатан Стерлинг
источник
источник
==
. Хотя, если вы выполняете поиск днем, помните, что NSDate - это дата и время - вы можете использовать диапазон от полуночи до полуночи.startDate
значение 2012-09-17 0:00:00 иendDate
2012-09-18 0:00:00, а предикат - startDate <= date <endDate. Это было бы все время на 2012-09-17.Пример того, как также настроить startDate и endDate для указанного выше ответа:
Здесь я искал все записи в течение одного месяца. Стоит отметить, что этот пример также показывает, как искать нулевые даты окончания.
источник
В Swift у меня получилось примерно следующее:
Мне было трудно обнаружить, что интерполяция строк
"\(this notation)"
не работает для сравнения дат в NSPredicate.источник
Расширение Swift 3.0 для Date:
Затем используйте как:
источник
Я перенес ответ из Glauco Neves в Swift 2.0 и заключил его в функцию, которая получает дату и возвращает значение
NSPredicate
для соответствующего дня:источник
Добавление к ответу Рафаэля (невероятно полезно, спасибо!), Перенос на Swift 3.
источник
Недавно я потратил некоторое время, пытаясь решить эту же проблему и добавить следующее в список альтернатив для подготовки дат начала и окончания (включая обновленный метод для iOS 8 и выше) ...
... и
NSPredicate
для основных данныхNSFetchRequest
(как уже показано выше в других ответах) ...источник
Для меня это сработало.
Я отфильтровал массив с текущей даты до 7 дней назад. Я имею в виду, что получаю данные за одну неделю с текущей даты. Это должно сработать.
Примечание: я конвертирую дату, которая идет с миллисекундами, на 1000 и сравниваю после. Дайте мне знать, если вам нужна ясность.
источник
completeArray
есть ли у него массивdictionary
илиdataModel
я хочу применить к DataModel.