2016-09-06 6 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

ダブルentries..any他の方法を作成out..still did't仕事.. –

答えて

0

eventExists = YES;以下のような

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

は動作しませんでした。私はそれを実行するたびに重複したエントリを作成しています。他のアイデア –

関連する問題