如何从 IOS 中的日历中删除旧事件
How to delete old events from calendar in IOS
在我的应用程序中,我将事件保存到日历中..
但是如果事件是从2015年2月1日到2015年2月20日。
我如何删除 2015 年 2 月 1 日至 2015 年 2 月 15 日的活动,因为这些活动已完成。
我用谷歌搜索并使用 iPhone
的“设置”选项找到了答案
https://apple.stackexchange.com/questions/103570/auto-delete-previous-old-events-from-ios-7-calendar
我使用下面的代码删除我日历中的所有事件
NSDate *startDate = [NSDate date];
NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow:[[NSDate distantFuture] timeIntervalSinceReferenceDate]];
NSArray *calendarArray = [NSArray arrayWithObject:self.defaultCalendar];
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarArray];
NSArray *events = [self.eventStore eventsMatchingPredicate:predicate];
for (EKEvent *event in events)
{
NSError* err = nil;
[self.eventStore removeEvent:event span:EKSpanFutureEvents commit:YES error:&err];
}
但是有任何方法可以删除 completed.Else 以编程方式删除早于 2015 年 2 月的事件。
注意:如果未设置结束日期,我正在使用需要 14 天的重复事件..
关于如何修复它的任何想法和建议..
提前致谢..!
我找到了解决方案。下面的代码将删除过去 2 天之前到 1 年前的所有事件。
来源Link:Fetching All Events
NSDate *today = [NSDate date];
NSDateComponents *components = [NSDateComponents new];
[components setDay:-2];
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:components
toDate:today
options:kNilOptions];
NSDate* startDate = [NSDate dateWithTimeIntervalSinceNow:[[NSDate distantPast] timeIntervalSinceReferenceDate]];
// use Dictionary for remove duplicates produced by events covered more one year segment
NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024];
NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:startDate];
int seconds_in_year = 60*60*24*365;
// enumerate events by one year segment because iOS do not support predicate longer than 4 year !
while ([currentStart compare:endDate] == NSOrderedAscending) {
NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:currentStart];
NSArray *calendarArray = [NSArray arrayWithObject:self.defaultCalendar];
if ([currentFinish compare:endDate] == NSOrderedDescending) {
currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:endDate];
}
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:calendarArray];
[self.eventStore enumerateEventsMatchingPredicate:predicate
usingBlock:^(EKEvent *event, BOOL *stop) {
if (event) {
[eventsDict setObject:event forKey:event.eventIdentifier];
}
}];
currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart];
}
NSArray *events = [eventsDict allValues];
for (EKEvent *event in events) {
NSError* err = nil;
[self.eventStore removeEvent:event span:EKSpanFutureEvents commit:YES error:&err];
}
今天是2015年2月17日。以上将删除2015年2月15日或之前的所有活动。
在我的应用程序中,我将事件保存到日历中..
但是如果事件是从2015年2月1日到2015年2月20日。
我如何删除 2015 年 2 月 1 日至 2015 年 2 月 15 日的活动,因为这些活动已完成。
我用谷歌搜索并使用 iPhone
的“设置”选项找到了答案https://apple.stackexchange.com/questions/103570/auto-delete-previous-old-events-from-ios-7-calendar
我使用下面的代码删除我日历中的所有事件
NSDate *startDate = [NSDate date];
NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow:[[NSDate distantFuture] timeIntervalSinceReferenceDate]];
NSArray *calendarArray = [NSArray arrayWithObject:self.defaultCalendar];
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarArray];
NSArray *events = [self.eventStore eventsMatchingPredicate:predicate];
for (EKEvent *event in events)
{
NSError* err = nil;
[self.eventStore removeEvent:event span:EKSpanFutureEvents commit:YES error:&err];
}
但是有任何方法可以删除 completed.Else 以编程方式删除早于 2015 年 2 月的事件。
注意:如果未设置结束日期,我正在使用需要 14 天的重复事件..
关于如何修复它的任何想法和建议..
提前致谢..!
我找到了解决方案。下面的代码将删除过去 2 天之前到 1 年前的所有事件。
来源Link:Fetching All Events
NSDate *today = [NSDate date];
NSDateComponents *components = [NSDateComponents new];
[components setDay:-2];
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:components
toDate:today
options:kNilOptions];
NSDate* startDate = [NSDate dateWithTimeIntervalSinceNow:[[NSDate distantPast] timeIntervalSinceReferenceDate]];
// use Dictionary for remove duplicates produced by events covered more one year segment
NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024];
NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:startDate];
int seconds_in_year = 60*60*24*365;
// enumerate events by one year segment because iOS do not support predicate longer than 4 year !
while ([currentStart compare:endDate] == NSOrderedAscending) {
NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:currentStart];
NSArray *calendarArray = [NSArray arrayWithObject:self.defaultCalendar];
if ([currentFinish compare:endDate] == NSOrderedDescending) {
currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:endDate];
}
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:calendarArray];
[self.eventStore enumerateEventsMatchingPredicate:predicate
usingBlock:^(EKEvent *event, BOOL *stop) {
if (event) {
[eventsDict setObject:event forKey:event.eventIdentifier];
}
}];
currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart];
}
NSArray *events = [eventsDict allValues];
for (EKEvent *event in events) {
NSError* err = nil;
[self.eventStore removeEvent:event span:EKSpanFutureEvents commit:YES error:&err];
}
今天是2015年2月17日。以上将删除2015年2月15日或之前的所有活动。