Sie können dies auf folgende Weise erreichen:
ein NSpredicate
mit dem Datumsbereich withing Durch die Erstellung, die Sie wollen Ereignisse löschen, 86400 die Dauer eines Tages in Veranstaltungen zu sein, in dieses Stück von Code lösche ich monatelange Ereignisse. Ich verwende eine Dispatch Queue, als die Nr. der abgerufenen Ereignisse kann groß sein und die Benutzeroberfläche freihalten.
Erste Erstellen Sie den Ereignisspeicher und überprüfen Zugang (Zugangsprüfung nur weiter erforderlich iOS6):
- (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];
}
}
Dann Ereignisse entfernen aus dem Laden:
- (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
});
});
}
Dies ist der lange Weg, Verwenden Sie es, um Ereignisse in großen Mengen zu löschen. Aber wenn Sie nur ein Ereignis löschen müssen, speichern Sie die Ereignisse Kennung `NSUserDefaults (nach dem Ereignis zu erzeugen)
[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:NULL];
[[NSUserDefaults standardUserDefaults] setObject:[event eventIdentifier] forKey:@"Event ID"];
und dann zurück zu holen, während das Entfernen mit
[eventStore eventWithIdentifier:@"Event ID"];
und entfernen Sie sie dann aus dem Speicher
[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL];
weitere Erläuterungen zu den anderen Verfahren unter Verwendung von Ereignissen oder Kalender zu holen, pelase siehe EventStore docs:
http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009567 oder bis t er Calendar and Reminder Programming guide:
http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765
Konnten Sie das lösen? –
http://stackoverflow.com/questions/3482920/removing-events-from-iphone-calendar-with-ekeventstore – iGo
Es gibt zwei doppelte Antworten !!! – Maulik