【问题标题】:Removing events from iPhone calendar with EKEventStore使用 EKEventStore 从 iPhone 日历中删除事件
【发布时间】:2014-12-20 04:12:17
【问题描述】:

我正在尝试删除我从 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]; 

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

谢谢,

【问题讨论】:

  • 尝试捕捉错误(记录错误)否则代码看起来没问题。或尝试第一个简单的日期,例如 [NSDate date] 作为开始日期和结束日期。
  • 如果您要使用其他方法删除,请先使用 [eventStore eventWithIdentifier:eventID]; 获取事件;
  • 如何确保我使用的是同一个 eventstore?文档说“如果事件开始时不在事件存储中,则此方法返回 NO。”
  • 我不是在说 eventstore,我想说的是保存事件的 eventIdentifier,例如 NSString *eventID = event.eventIdentifier
  • 非常感谢。我现在可以删除事件了 :)

标签: iphone events calendar


【解决方案1】:

创建事件后,我将 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];

【讨论】:

  • 你在哪里存储数组?核心数据?
  • 我使用 [NSFileManager defaultManager] 和 writeToFile 将其保存为文件。
  • 这里 [store eventWithIdentifier:[arrayofCalIDs objectAtIndex:i]] 中的“I”是什么;
【解决方案2】:

以上答案仅供参考。它可以通过以下链接在网络上找到: 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];
            }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多