2010-09-08 12 views
14

Ich versuche, ein Ereignis aus dem Kalender auf Benutzeranforderung zu löschen. Dies ist, was ich mit:Löschen eines Ereignisses aus dem Kalender des iPhone

// Deleting Event 
    EKEventStore *eventStore = [[EKEventStore alloc] init]; 
EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
event.title  = appDelegate.title1; 
event.startDate = appDelegate.recAddDate; 
event.endDate = appDelegate.currentDateName; 
[event setCalendar:[eventStore defaultCalendarForNewEvents]]; 
NSError *err; 
[eventStore removeEvent:event span:EKSpanThisEvent error:&err]; 

haben. Unten ist die Funktion, die ich anrufe, um das Ereignis aus dem Ereignisarray zu entfernen. Array Items wird verwendet, um Ereignisse von iPhone-Kalender

- (BOOL)removeEvent:(EKEvent *)event span:(EKSpan)span error:(NSError **)error{ 
    VoiceRecorderAppDelegate *appDelegate = (VoiceRecorderAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [items removeObjectAtIndex:appDelegate.objectindexpath]; 
} 
+0

Konnten Sie das lösen? –

+1

http://stackoverflow.com/questions/3482920/removing-events-from-iphone-calendar-with-ekeventstore – iGo

+0

Es gibt zwei doppelte Antworten !!! – Maulik

Antwort

16

Zum einen holen, die eventId für die Veranstaltung zu retten, während des Hinzufügen/Ereignisse in den Kalender zu speichern.

und identifizieren Sie dann das Ereignis, das Sie entfernen möchten, und entfernen Sie dieses Ereignis.

EKEventStore* store = [[EKEventStore alloc] init]; 
EKEvent* eventToRemove = [store eventWithIdentifier:[arrayofEventId objectAtIndex:i]]; 
if (eventToRemove != nil) { 
    NSError* error = nil; 
    [store removeEvent:eventToRemove span:EKSpanThisEvent error:&error]; 
} 

Vergessen Sie auch nicht, dieses Ereignis von arrayofEventId zu entfernen.

+1

können Sie mir, was ist 'ArrayofEventId', wo Sie es deklariert. – akk

+2

Sieht aus, als wäre es nur ein leeres NSMutableArray, Sie können es selbst deklarieren. mit [NSMutableArray-Array]; –

+0

ich nur NSLog (% @ ", event.eventIdentifier) ​​und es geben null können Sie mir sagen, warum? –

1

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

Verwandte Themen