Esto se puede conseguir de las siguientes maneras:
Al crear una NSpredicate
utilizando el PLAZO DE rango de fechas que quiere eliminar eventos, 86400 siendo la duración de un día en los acontecimientos, en esta pieza del código Estoy eliminando eventos de un mes. Estoy usando una cola de distribución , como el no. de eventos recuperados puede ser grande y mantener la UI libre.
En primer lugar crear el almacén de eventos y el registro de acceso (comprobación de acceso requerido solamente iOS 6 en adelante):
- (void)addEventsToCalendar {
EKEventStore *eventStore = [[EKEventStore alloc] init];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
//implementation for devices running OS version iOS 6.0 onwards.
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
[self removeEventsFromStore:eventStore];
} else {
//perform for No Access using Error
}];
} else {
//implementation for devices running OS version lower than iOS 6.0.
[self removeEventsFromStore:eventStore];
}
}
A continuación, retire los acontecimientos de la tienda:
- (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(), ^{
//Get the main Queue and perform UPdates
});
});
}
Este es el camino largo, Úselo para eliminar eventos a granel. Pero si necesita eliminar un único evento, a continuación, guarde el identificador de eventos a `NSUserDefaults (después de generar el evento)
[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:NULL];
[[NSUserDefaults standardUserDefaults] setObject:[event eventIdentifier] forKey:@"Event ID"];
y luego traerlo de vuelta mientras se quita usando
[eventStore eventWithIdentifier:@"Event ID"];
y luego lo elimina de la tienda utilizando
[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL];
para más aclaraciones sobre los otros métodos en busca de eventos o calendario, pelase referirse a EventStore docs:
http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009567 o a t él Calendar and Reminder Programming guide:
http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765
¿Pudo solucionar esto? –
http://stackoverflow.com/questions/3482920/removing-events-from-iphone-calendar-with-ekeventstore – iGo
¡Hay dos respuestas duplicadas! – Maulik