Проблема в том, что NSDate не имеет свойства day
(или любого другого подобного). Если это так, ваш предикат будет работать как написано.
Программирование данных и времени обманчиво сложно. Например, в общем использовании фраза «та же дата» означает точно такой же календарный день. Однако с точки зрения кодов это также означает ту же неделю, месяц и год, потому что дни не более важны для кода, чем любое другое произвольное деление календаря. Даже при обычном использовании «день» может относиться к определенному диапазону часов, например Суббота, 21 августа 2010 года, или она может относиться к любому произвольному интервалу в 24 часа, например, «в течение дня». Какой вам нужен для этого приложения?
NSDate на самом деле является оберткой объекта с точностью до микросекунды. У него есть методы для преобразования в строки и для создания и сравнения временных меток, но он не понимает атрибуты календаря, такие как секунды, минуты, часы, дни, недели, месяц или годы. Именно для этого и предназначен NSCalendar, и Базовые Данные не поддерживают этот класс как тип данных, так как это делает все возможные календари слишком сложными.
Если в модели требуются атрибуты календаря, вам необходимо создать пользовательский объект, который моделирует дату календаря. Задайте для атрибутов сущностей атрибуты календаря, которые необходимо смоделировать, а затем установите связь с объектом, которому требуется календарная дата, в качестве свойства, например.
CalendarDate{
date:NSDate
minute:int
hour:int
day:int
month:int
year:int
events<--(required,nullify)-->>Event.date
}
Вы можете создать собственный класс для сущности и предоставить метод, который автоматически заполняет объект на основе переданной NSDate и любого выбранного вами календаря.
Теперь ваш предикат прост.
NSPredicate *myPred;
myPred=[NSPredicate predicateWithFormat:@"(date.date==%@ or date.day==%i) AND repeat=%i", currentDate, 45, kMonthly];
Это кажется громоздким, но это требуется из-за истинной сложности календарных дат. Просто не существует простого способа обработки вычислений и сравнений даты и времени для всех целей.