Я создаю EKEvent в календаре с шаблоном повторения.
EKRecurrenceRule <0x6000000b0980> RRULE
FREQ = НЕДЕЛЬНЫЙ; ИНТЕРВАЛ = 2; BYDAY = СУ, МО; WKST = СУ
Событие создается в воскресенье 13 мая 2018 года и должно проводиться каждые 2 недели в воскресенье и понедельник.
Согласно правилу повторения, следующие даты вхождения - 14 мая 2018 года, 27 мая 2018 года, 28 мая 2018 года и т. Д.
Я ищу способ получить следующую дату вхождения, основываясь на правиле повторения, которое в данном случае будет 14 мая 2018 года.
Я могу получить текущую дату вхождения, набрав event.occurrenceDate;
Однако я не смог найти способ получить следующую дату вхождения.
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.startDate = self.startTime;
event.endDate = [event.startDate dateByAddingMinutes:self.durationMins];
event.recurrenceRules = [NSArray arrayWithObject:[[EKRecurrenceRule alloc] initWithString:@"FREQ=WEEKLY;INTERVAL=2;BYDAY=SU,MO;"]];
NSDate *currentOccurence = event.occurrenceDate;
NSDate *nextOccurence = ?? ;
Я пытался сделать это:
Получить все события за месяц и сравнить каждое событие с текущим происходящим событием. Если они совпадают, получите дату следующего события.
NSPredicate * predicate = [self.eventStore predicateForEventsWithStartDate:event.startDate endDate:[event.startDate dateByAddingMonths:1] calendars:@[[self.eventStore calendarWithIdentifier:self.selectedCalendarIdentifier]]];
NSArray * events = [self.eventStore eventsMatchingPredicate:predicate];
for (EKEvent * temp in events) {
//get the next event by comparing this event occurrence with current event occurrence date
}
и я вижу, что массив событий не имеет правильных дат возникновения. В нем отсутствуют некоторые даты появления.
Я также могу воспроизвести это в приложении родного календаря.
Я создал тестовое событие с тем же шаблоном повторения, которое происходит каждые 2 недели на солнце, понедельник.
Однако он отображается только в понедельник каждую неделю.



Как видно из ежемесячного календаря, событие должно появиться только 13 мая, 14 мая, а следующее вхождение 27 мая, 28 мая, а следующее вхождение 10 июня, 11 июня, исходя из схемы повторения, но это выступление 13 мая (верно), 21 мая (неправильно), 27 мая (правильно), 4 июня (неправильно).