【问题标题】:iOS - Delete Recurring EKEvent, event appears againiOS - 删除 Recurring EKEvent,事件再次出现
【发布时间】:2013-12-11 13:35:43
【问题描述】:

我在日历中有一个经常性事件。我正在使用此代码 [store removeEvent:event span:EKSpanThisEvent commit:YES error:&errorThis]; 删除单个事件,此方法返回 true 但该事件并未从日历中删除。

【问题讨论】:

    标签: ios objective-c ekevent ekeventkit ekeventstore


    【解决方案1】:

    在使用属性 calendarItemExternalIdentifier 的 EKCalendarItem 类参考中,您会发现这个

    所有事件的重复事件标识符都是相同的。如果您想区分事件,您可能需要使用开始日期

    所以你想只删除一次重复,你必须这样做:

    NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars];
    
    NSArray *theEvents = [eventStore eventsMatchingPredicate:predicate];
    NSString *recurrenceEventIdentifier;
    
    for(EKEvent * theEvent in theEvents)
    {                
        if([theEvent.eventIdentifier isEqualToString: recurrenceEventIdentifier]
            && ![eventStore removeEvent:theEvent span:EKSpanThisEvent error:&error])
        {
            NSLog(@"Error in removing event: %@",error);
        }
    
    }
    

    相反,您的方法只删除第一个匹配项。如果您想删除所有重复发生的事件,只需更改 EKSpanFutureEvents 中的“span”参数即可。

    编辑:现在只删除匹配的重复事件,而不是所有内容。

    【讨论】:

    • 那么您还需要使用 eventIdentifier 区分事件,否则您将删除所有以该日期开始和结束的事件
    【解决方案2】:

    请确保您的应用中只有一个单例模式的 EKEventStore 实例:

    static EKEventStore *eventStore = nil;
    + (EKEventStore *)getEventStoreInstance
    {
        if (eventStore == nil){
            @synchronized(self){
                if (eventStore == nil){
                    eventStore = [[EKEventStore alloc] init];
                }
            }
        }
        return(eventStore);
    }
    

    【讨论】:

    • 它有什么不同?我可以删除不重复的事件。
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多