Как удалить старые события из календаря в iOS

В своем приложении я сохраняю события в календаре ..

Но если мероприятие будет с 1 февраля 2015 года по 20 февраля 2015 года.

Как я могу удалить События с 1 февраля 2015 года по 15 февраля 2015 года, поскольку это завершенные события.

Я погуглил и нашел ответ, используя параметр настроек 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 г. программно.

Примечание. Я использую повторяющиеся события, которые занимают 14 дней, если не задана дата окончания.

Любые идеи и предложения, как это исправить ..

Заранее спасибо..!


person Vidhyanand    schedule 16.02.2015    source источник


Ответы (1)


Я нашел решение. Приведенный ниже код удалит все события, произошедшие от 2 дней до 1 года назад.

Ссылка на источник: Получение всех событий

    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];

        }

Сегодняшняя дата - 17 февраля 2015 года. Выше будут удалены все события, которые состоятся 15 февраля 2015 года или ранее.

person Vidhyanand    schedule 17.02.2015