È possibile raggiungere questo nei seguenti modi:
Creando un NSpredicate
utilizzando il withing intervallo di date che si desidera eliminare gli eventi, 86400 essendo la durata di una giornata in eventi, in questo pezzo di codice sto cancellando eventi vecchi di un mese. Sto usando una coda di invio , come il n. di eventi recuperati può essere grande e mantenere l'interfaccia utente libera.
prima creare l'archivio eventi e controllare l'accesso (controllo di accesso richiesto solo iOS6 in poi):
- (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];
}
}
Poi rimuovere gli eventi dal negozio:
- (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
});
});
}
Questa è la via Lunga, usalo per cancellare eventi in blocco. Ma se avete bisogno di cancellare un solo evento, quindi salvare l'identificatore eventi a `NSUserDefaults (dopo aver generato l'evento)
[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:NULL];
[[NSUserDefaults standardUserDefaults] setObject:[event eventIdentifier] forKey:@"Event ID"];
e poi prenderlo di nuovo durante la rimozione utilizzando
[eventStore eventWithIdentifier:@"Event ID"];
e quindi rimuoverlo dal negozio utilizzando
[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL];
per ulteriori chiarimenti sugli altri metodi per recuperare gli eventi o calendario, pelase fare riferimento a EventStore docs:
http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009567 o t he Calendar and Reminder Programming guide:
http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765
Sei riuscito a risolvere questo? –
http://stackoverflow.com/questions/3482920/removing-events-from-iphone-calendar-with-ekeventstore – iGo
Ci sono due risposte doppie !!! – Maulik