【问题标题】:Remove duplicate entries in calendar iOS删除日历 iOS 中的重复条目
【发布时间】:2016-09-06 06:40:41
【问题描述】:

我正在尝试将事件保存在本地日历中。但是,我的事件被保存在日历中,但每次我在设备或模拟器上运行代码时,它都会创建重复的条目。我已尽一切努力避免它,但无法获得任何帮助。

这是我的代码。

-(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]);

            }



        }


    });

}];


}

}

【问题讨论】:

标签: ios objective-c


【解决方案1】:

在 eventExists = YES 之后应用中断;喜欢

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

【讨论】:

  • 没用。每次我运行它时仍然会创建重复的条目。任何其他想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 2013-03-09
  • 2011-12-08
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多