2016-09-06 59 views
-2

我正在嘗試將事件保存在本機日曆中。但是,我的活動正在保存在日曆中,但每次在設備或模擬器上運行代碼時,都會創建重複的條目。我已經使用了一切需要避免的東西,但無法獲得任何幫助。刪除日曆中的重複條目iOS

這是我的代碼。

-(void)addEvents :(NSMutableArray *)sentarray{ 

    for (int i =0; i<sentarray.count; i++) { 

     Schedule *schdeule = [events objectAtIndex:i]; 

     EKEventStore *store = [[EKEventStore alloc] init]; 

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      if (error) 
      { 
       NSLog(@"Error in dispatching data in the queue"); 
      } 
      else if (!granted) { 

       NSLog(@"NoPermission to access the calendar"); 

       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot sync data with your calendar" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

       [alert show]; 

      return; 

     } 
      else{ 
        EKEvent *event = [EKEvent eventWithEventStore:store]; 
        event.title =schdeule.title; 
        event.startDate = schdeule.startDate; //today 
        event.endDate = schdeule.endDate; //set 1 hour meeting 
        event.calendar = [store defaultCalendarForNewEvents]; 
        NSError *err = nil; 
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 

        // Store this so you can access this event later for editing 
        savedEventId = event.eventIdentifier; 


     if (!err) { 


      NSPredicate *predicateForEventsOnMeetingDate = [store predicateForEventsWithStartDate:schdeule.startDate endDate:schdeule.endDate calendars:nil]; // nil will search through all calendars 

      NSArray *eventsOnMeetingDate = [store eventsMatchingPredicate:predicateForEventsOnMeetingDate]; 

      __block BOOL eventExists = NO; 


      [eventsOnMeetingDate enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
       for (EKEvent *eventToCheck in eventsOnMeetingDate) { 
        if ([eventToCheck.title isEqualToString:schdeule.title]) { 
         eventExists = YES; 
        } 
       } 

       if (eventExists == NO) { 
        EKEvent *addEvent = [EKEvent eventWithEventStore:store]; 
        addEvent.title = schdeule.title; 
        addEvent.startDate = schdeule.startDate; 
        addEvent.endDate =schdeule.endDate; 
        [addEvent setCalendar:[store defaultCalendarForNewEvents]]; 
        [store saveEvent:addEvent span:EKSpanThisEvent commit:YES error:nil]; 
       } 






       }]; 
       NSLog(@"saved"); 

       if (i == sentarray.count-1) { 

       // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"calshow://"]]; 


         } 

       } 
     else { 

       NSLog(@"%@",[err localizedDescription]); 

      } 



     } 


    }); 

}]; 


} 

} 
+0

檢查:http://stackoverflow.com/a/9340888/3755954 – Mayur

+0

我以前不工作out..still創建雙entries..any其他方式.. –

回答

0

在eventExists = YES後應用break;像

... // other code 
for (EKEvent *eventToCheck in eventsOnMeetingDate) { 
    if ([eventToCheck.title isEqualToString:schdeule.title]) { 
     eventExists = YES; 
     break; 
    } 
} 
... //other code 
+0

沒有工作。每次運行它時仍然會創建重複的條目。任何其他的想法 –