【问题标题】:How to delete old events from calendar in IOS如何在 IOS 中从日历中删除旧事件
【发布时间】:2015-02-16 12:51:42
【问题描述】:

在我的应用程序中,我将事件保存到日历中..

但如果活动是从 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];
}

但是否可以通过任何方式删除已完成的旧事件。否则以编程方式删除旧于 2015 年 2 月的事件。

注意:如果未设置结束日期,我正在使用需要 14 天的重复事件..

任何想法和建议如何解决它..

在此先感谢..!

【问题讨论】:

    标签: ios objective-c nscalendar ekevent


    【解决方案1】:

    我找到了解决方案。下面的代码将删除过去 2 天到 1 年前的所有事件。

    来源链接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 日或之前的所有事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多