2014-10-29 83 views
0

我用下面這段代碼添加事件,我的代碼調用多次,所以我有重複的情況下,有任何想法,以防止重複的iOS - 防止重複添加事件到日曆

預先感謝您

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

不要多次調用您的代碼? – Paulw11 2014-10-29 10:19:55

+0

我必須添加新事件我應該叫它 – 2014-10-29 10:22:12

回答

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 

} 
+1

這個很好的答案,但我更喜歡make標識符我的事件ID,原因名稱可能重複謝謝 – 2014-10-29 10:48:11

+0

我不知道你做了一個'event_id',但是,肯定的,肯定的一條更好的路線。 – 2014-10-29 10:50:54

+0

我錯誤分配到只讀屬性 – 2014-10-29 10:52:35