使用EKEventStore从iPhone日历中删除事件

时间:2010-08-14 10:33:13

标签: iphone events calendar

我正在尝试删除我在iPhone日历中创建的事件。

我尝试了这个,但它总是返回NO:

  [eventStore removeEvent:event span:EKSpanThisEvent error:&err];

我按如下方式创建了该事件,它可以工作:

eventStore = [[EKEventStore alloc] init];

event = [EKEvent eventWithEventStore:eventStore];

event.title = @"EVENT TITLE";
NSDateFormatter *   dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd:HH:mm"];


NSDate * date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:@"2010-8-15:12:30"];
[date retain];

event.startDate = date;
event.endDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];

[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 

有没有办法删除此活动?或者,如果我再次尝试编写此事件,它只会修改它而不是创建一个新事件会更好。

谢谢,

2 个答案:

答案 0 :(得分:6)

创建事件后,我将eventIdentifier保存在一个数组中:

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

要删除事件:

EKEventStore* store = [[[EKEventStore alloc] init] autorelease];
   EKEvent* event2 = [store eventWithIdentifier:[arrayofCalIDs objectAtIndex:i]];
if (event2 != nil) {  
  NSError* error = nil;
  [store removeEvent:event2 span:EKSpanThisEvent error:&error];
} 
[myPath release];

答案 1 :(得分:0)

上述答案仅供参考。它可以通过以下链接在网上找到: http://tech.vniup.com/index.php/iphone/objective-c/how-to-delete-event-from-iphone-calendar-programmatically.html

我唯一的建议是,如果要构建一个对象数组,理想情况下每个对象都是事件。然后执行反向数组操作,因为最新事件将始终位于底部。

NSMutableArray *reverseArray = [NSMutableArray arrayWithCapacity:[eventsList count]];

for (id element in [eventsList reverseObjectEnumerator]) {
    [reverseArray addObject:element];
}
eventsList = reverseArray;

并且在事件的显示中对用户友好并显示事件的开始日期。

无论如何,在你有一个EKEvents的数组对象后,你可以做到这一点,这更容易。

EKEvent *eventToRemove = [myEventStore eventWithIdentifier:thisEvent.eventIdentifier ];
        if ([eventToRemove.eventIdentifier length] > 0) {
            NSError* error = nil;
            [myEventStore removeEvent:eventToRemove span:EKSpanThisEvent error:&error];
            }

然后你可以从表格显示的事件数组中删除相同的事件....简单!