背景资讯
我有一个包含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];
答案 0 :(得分:1)
我决定使用EKAlarm
并将其添加到每个事件中。
EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:60 * 60 * 24 * ([daysPrior integerValue] * -1)];
[newEvent addAlarm:alarm];
通过这种方式,我可以在日历的实际日期添加活动日期,并仍然提醒用户x之前的天数。