你可以通过以下方式实现:
使用包含要删除事件的日期范围的NSpredicate,86400是事件中一天的持续时间,在此代码片段中,我正在删除一个月前的事件。我正在使用调度队列,因为获取的事件数量可能很大,并且保持UI自由。
首先创建事件存储并检查访问权限(仅在iOS6及以上版本需要进行访问检查)。
- (void)addEventsToCalendar {
EKEventStore *eventStore = [[EKEventStore alloc] init];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
[self removeEventsFromStore:eventStore];
} else {
}];
} else {
[self removeEventsFromStore:eventStore];
}
}
然后从存储中删除事件:
- (void)removeEventsFromStore:(EKEventStore*)eventStore {
NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-30 * 86400];
NSDate *endDate = [NSDate date];
dispatch_queue_t queue = dispatch_queue_create("com.arc.calendar", NULL);
dispatch_async(queue, ^{
NSArray *calendarArray = [NSArray arrayWithObject:[PWCCalendar getCalendarForEventStore:eventStore]];
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:[NSDate dateWithTimeInterval:ONE_DAY_DURATION sinceDate:endDate] calendars:calendarArray];
NSArray *eventArray = [eventStore eventsMatchingPredicate:predicate];
for (EKEvent *event in eventArray) {
[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL];
}
dispatch_async(dispatch_get_main_queue(), ^{
});
});
}
这是一种冗长的方法,用于批量删除事件。但如果您只需要删除一个事件,则在生成事件后将事件标识符保存到`NSUserDefaults`中即可。
[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:NULL]
[[NSUserDefaults standardUserDefaults] setObject:[event eventIdentifier] forKey:@"Event ID"]
然后通过
删除它并将其取回。
[eventStore eventWithIdentifier:@"Event ID"];
然后使用以下方法从存储中删除它:
[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL]
如果您想了解其他获取事件或日历的方法,请参考 EventStore文档:
http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009567 或者 日历和提醒编程指南:
http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765