如何设置EKEvent在特定日期之前重复变换天数?

时间:2013-01-29 19:22:37

标签: cocoa ekeventkit

背景资讯

我有一个包含NSDate对象的类,该对象用作EKEvent的日期。 EKEvent已添加到日历中,有时设置为EKRecurrenceRule,日期为事件实际日期之前的x天数。例如,如果dateOfEvent是02/01/2013并且用户选择在2天前收到提醒,则该事件将在2013年1月30日添加到日历中。

以下是我如何获得前一个日期:

NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = ([daysPrior integerValue] * -1);
NSDate *alertDate = [[NSCalendar currentCalendar] dateByAddingComponents:components
                                                                  toDate:[myClass dateOfEvent]
                                                                 options:0];

当前问题

EKRecurrenceRule设置为EKRecurrenceFrequencyMonthly时,它会在每个月的alertDate中选择该月的某一天。上面的例子那天结束了第30天,但是2月没有第30天,事件永远不会被添加到2月。我怎样才能让它实际设定每月的前几天而不是基于特定的数字呢?

尝试失败

我尝试在重复规则中添加负数日期,希望它基于我设置的事件日期并向后移动,但它会将事件添加到日历上的每一天。

NSMutableArray *daysOfMonth = [[NSMutableArray alloc] init];
int x;
for (x = 0; x > -31; x--) {
    [daysOfMonth addObject:[NSNumber numberWithInt:x]];
}
EKRecurrenceRule *rule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:EKRecurrenceFrequencyMonthly
                                                                      interval:1
                                                                 daysOfTheWeek:nil
                                                                daysOfTheMonth:daysOfMonth
                                                               monthsOfTheYear:nil
                                                                weeksOfTheYear:nil
                                                                 daysOfTheYear:nil
                                                                  setPositions:nil
                                                                           end:nil];

1 个答案:

答案 0 :(得分:1)

我决定使用EKAlarm并将其添加到每个事件中。

EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:60 * 60 * 24 * ([daysPrior integerValue] * -1)];
[newEvent addAlarm:alarm];

通过这种方式,我可以在日历的实际日期添加活动日期,并仍然提醒用户x之前的天数。