ekevent - 如何获取 future 日期的特定循环 EKEvent?

标签 ekevent ekeventkit ekeventstore

我将周期性事件 (EKEvent) 写入日历中。如何获取并修改特定日期内的这些重复事件之一?

事件是通过以下代码创建的:

+ (void) writeTestEvent{

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *event = [EKEvent eventWithEventStore:eventStore];

    event.calendar = [eventStore defaultCalendarForNewEvents];
    event.title = @"Hello World!";
    event.startDate = [NSDate date];
    event.endDate = [NSDate date];

    EKRecurrenceRule *recurrenceRule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:EKRecurrenceFrequencyDaily interval:1 end:nil];
    [event addRecurrenceRule:recurrenceRule];

    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (granted) {
            BOOL isSaved = [eventStore saveEvent:event span:EKSpanFutureEvents commit:YES error:&error];
            NSLog(@"isSaved: (%d) with error: %@", isSaved, error);
        } else {
            NSLog(@"not granted with error: %@", error);
        }
    }];
}

使用 -predicateForEventsWithStartDate:endDate:calendars: 仅获取日期范围内的事件,而不是特定事件。使用事件标识符只能获取一个事件,但不能获取具体日期。

最佳答案

根据documentation :

Recurring event identifiers are the same for all occurrences. If you wish to differentiate between occurrences, you may want to use the start date.

获取 EKEvent 特定重复发生的示例:

EKEventStore *eventStore = [[EKEventStore alloc] init];

NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars];

NSArray *results =  [eventStore eventsMatchingPredicate:predicate];
for (int i = 0; i < results.count; i++) {
     EKEvent *event = [results objectAtIndex:i]
     if ([event. eventIdentifier isEqualToString: eventIdentifier]) {
        // Match!!
    break;
    }
}

关于ekevent - 如何获取 future 日期的特定循环 EKEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176709/

相关文章:

objective-c - 如何获取 iPhone 日历上已存在的事件的开始日期?

iphone - 在 EKReminder 中设置 startDateComponents 时出现 "Invalid date component"错误

ios - iPhone 事件工具包 : programmatically SUBSCRIBE to a new calendar

iphone - 如何自定义EKEventView显示的EKEventEditView的颜色?

ios - EKEventStore 与 iOS Widget 错误 : [EventKit] Client tried to open too many connections to calaccessd. 拒绝打开另一个

ios - 保存超过100个ekevent后,应用程序崩溃且Iphone重新启动

ios - 如何创建具有不同标识符的 EKEventStore 不同实例?

swift - 在 Swift 中从日历中获取提醒

iphone - 授予日历隐私访问问题