iOS - 防止向日历重复添加事件

时间:2014-10-29 10:10:29

标签: ios objective-c calendar ios8 xcode6

我使用下面的代码添加事件,我的代码多次调用,所以我有重复的事件,是否有任何想法防止重复

提前谢谢

    EKEvent *event = [EKEvent eventWithEventStore:es];
    NSDateFormatter *dateFormats = [[NSDateFormatter alloc]init];
    [dateFormats setDateFormat:@"yyy-MM-dd"];

    NSDate *date1 = [[NSDate alloc] init];
    NSDate *date2 = [[NSDate alloc] init];
    date1 = nil;
    date2 = nil;
    date1 = [dateFormats dateFromString:event2.from_date];
    date2 = [dateFormats dateFromString:event2.to_date];


    event.title  = event2.event_title;
    event.allDay = NO;
    event.startDate = date1;
    event.endDate = date2;

    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f *60.0f *24]];
    //put here if start and end dates are same
    [event setCalendar:[es defaultCalendarForNewEvents]];

    [es saveEvent:event span:EKSpanThisEvent commit:YES error:nil];

1 个答案:

答案 0 :(得分:1)

我的回答是基于这个教程Calendar event management tutorial。所以当然如果事情没有正确排列,请参考它。

EKEvent *event = [EKEvent eventWithEventStore:es];
NSDate *date1 = [NSDate new];
NSDate *date2 = [NSDate new];
date1 = nil;
date2 = nil;
date1 = [dateFormats dateFromString:event2.from_date];
date2 = [dateFormats dateFromString:event2.to_date];


event.title  = event2.event_title;
event.allDay = NO;
event.startDate = date1;
event.endDate = date2;

NSPredicate *predicate = [es predicateForEventsWithStartDate:event2.from_date endDate:event2.to_date calendars:nil];
NSArray *eventsOnDate = [es eventsMatchingPredicate:predicate];

__block BOOL eventExists = NO;

[eventsOnDate enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    EKEvent *eventToCheck = (EKEvent*)obj;

    if([event.title isEqualToString:eventToCheck.title])
    {
        eventExists = YES;
        *stop = YES;
    }
}];

if(! eventExists) {
    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f *60.0f *24]];
    //put here if start and end dates are same
    [event setCalendar:[es defaultCalendarForNewEvents]];

    [es saveEvent:event span:EKSpanThisEvent commit:YES error:nil];


    NSError *saveEventError;
    [es saveEvent:event span:EKSpanThisEvent error: &saveEventError];

    if(saveEventError) {
        //ERROR OCCURED WHILE SAVING

    } else {
        //SUCCESSFULLY SAVED
    }

} else {
    // EVENT ALREADY EXISTS

}
相关问题