2010-09-08 69 views
14

我想從用戶請求上的日曆中刪除事件。這是我想出的:從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]; 

以下是我打電話從事件數組中刪除事件的函數。項目陣列用於從iPhone日曆

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

你能解決這個問題嗎? – 2011-07-28 13:33:24

+1

http://stackoverflow.com/questions/3482920/removing-events-from-iphone-calendar-with-ekeventstore – iGo 2011-08-01 13:30:50

+0

有兩個重複的答案! – Maulik 2011-12-30 12:34:36

回答

16

首先獲取事件,保存事件ID的事件,同時增加/保存事件到日曆。

[eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 
NSString* str = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier]; 
[arrayofEventId addObject:str]; 

然後確定要刪除ande的事件,然後刪除該事件。

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]; 
} 

也不要忘記從arrayofEventId中刪除該事件。

+1

你能告訴我什麼是'arrayofEventId',你在哪裏宣佈它。 – akk 2012-05-29 06:16:12

+2

看起來這只是一個空的NSMutableArray,你可以自己聲明它。與[NSMutableArray數組]; – 2013-06-20 20:13:34

+0

我只是NSLog(%@「,event.eventIdentifier),它給null,你可以告訴我爲什麼? – 2015-08-19 14:08:56

1

您可以通過以下方式實現這一目標:

通過使用您 要刪除的事件,86400是一個一天事件的持續時間的日期範圍withing創建NSpredicate,在 這塊的代碼我正在刪除月份舊事件。我使用 調度隊列,作爲no。獲取的事件可能很大,並保持UI免費。

首先創建事件存儲和查詢訪問(僅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]; 
     } 
    } 

然後從商店下架事件:

- (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 
      }); 
     }); 
    } 

這是很長的路要走,用它來批量刪除事件。但是,如果你需要刪除只有一個事件,然後取出用

[eventStore eventWithIdentifier:@"Event ID"]; 

而保存的事件標識符`NSUserDefaults的

[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:NULL]; 
[[NSUserDefaults standardUserDefaults] setObject:[event eventIdentifier] forKey:@"Event ID"]; 

,然後把它抓回來(生成事件後),然後將其刪除從使用

[eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:NULL]; 

更多澄清的其他方法來提取事件或日曆,商店pelase指EventStore docs:http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html#//apple_ref/doc/uid/TP40009567或到t他Calendar and Reminder Programming guide:http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765