如何获取EKEvent的下一个出现日期?

时间:2018-05-13 17:52:42

标签: ios objective-c ekevent ekrecurrencerule

我在日历中使用重复模式创建了一个EKEvent。

  

EKRecurrenceRule< 0x6000000b0980> RRULE   FREQ = WEEKLY; INTERVAL = 2; BYDAY = SU,MO; WKST = SU

该活动于2018年5月13日星期日创建,并应在周日和周一每2周出现一次。

根据递延规则,下一个出现日期是2018年5月14日,2018年5月27日,2018年5月28日等等

我正在寻找一种方法来根据重复规则获取下一个出现日期,在这种情况下,该规则是2018年5月14日。

我可以通过访问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

                }

我看到events数组没有正确的发生日期。它缺少一些发生日期。

我也可以在原生日历应用中重现这一点。 我创建了一个具有相同重复模式的测试事件,该模式在sun,mon。每两周发生一次。

然而,它只在星期一每周显示。

enter image description here

enter image description here

enter image description here

正如您在月历中看到的那样,事件应该仅在5月13日,5月14日,以及下一次出现5月27日,5月28日,以及下一次出现6月10日,6月11日,基于重复模式,但它是出现于5月13日(正确),5月21日(错误),5月27日(正确),6月4日(错误)。

0 个答案:

没有答案