iOS - Delete Recurring EKEvent, event appears again

2k views Asked by At

I have a recurring event in calendar. I'm delete a single event using this code [store removeEvent:event span:EKSpanThisEvent commit:YES error:&errorThis]; and this methods returns true but the event is not deleted from the calendar.

2

There are 2 answers

2
Bonch On BEST ANSWER

On EKCalendarItem Class reference using the property calendarItemExternalIdentifier you find this

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

So you want delete only a recurrence you have to do something like this:

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

NSArray *theEvents = [eventStore eventsMatchingPredicate:predicate];
NSString *recurrenceEventIdentifier;

for(EKEvent * theEvent in theEvents)
{                
    if([theEvent.eventIdentifier isEqualToString: recurrenceEventIdentifier]
        && ![eventStore removeEvent:theEvent span:EKSpanThisEvent error:&error])
    {
        NSLog(@"Error in removing event: %@",error);
    }

}

Your method instead, deletes only the first occurrence. If you want delete all recurring events just change "span" parameter in EKSpanFutureEvents.

EDIT: Now only deletes the matching recurrent event, not everything.

1
Mohammad Rabi On

Please make sure you have only one instance of EKEventStore in singleton pattern in your app :

static EKEventStore *eventStore = nil;
+ (EKEventStore *)getEventStoreInstance
{
    if (eventStore == nil){
        @synchronized(self){
            if (eventStore == nil){
                eventStore = [[EKEventStore alloc] init];
            }
        }
    }
    return(eventStore);
}