Ekevents在日历中多次添加?

时间:2016-07-15 11:57:47

标签: ios iphone ipad icalendar ekeventstore

在我的应用程序中,我正在向设备日历添加一个事件。我正在这样做

if ([db.saveCalenderSettings isEqualToNumber:[NSNumber numberWithBool:YES]]){

    NSPredicate *predicateForEventOnDate = [store predicateForEventsWithStartDate:strtdate endDate:[strtdate dateByAddingTimeInterval:60*60] calendars:nil];                                     
    NSArray *eventsOnDate = [store eventsMatchingPredicate:predicateForEventOnDate];

    __block BOOL eventExists = NO;

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

        EKEvent *eventToCheck = (EKEvent*)obj;

        if([note isEqualToString:eventToCheck.notes]) {
             eventExists = YES;
             *stop = YES;
        }
    }];
    NSLog(@"%@",eventsOnDate);
    if(! eventExists) {
        NSLog(@"Event not exists so adding");

        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = subject; //give event title you want
        event.notes = note ;
        event.startDate = strtdate;
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];
        event.calendar = [store defaultCalendarForNewEvents];
        //   EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:60*15*-1];
        //   event.alarms = [NSArray arrayWithObject:alarm];

        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];

        if (!err) {

             [db setSavedtocalender:@"yes"];

        }
        else {
              //  NSLog(@" Event not created");
              [db setSavedtocalender:@"no"];

        }
    }
    else {
         NSLog(@"Event exists");
         [db setSavedtocalender:@"yes"];                             
     }
}                                 

但问题是在默认日历中多次添加相同的事件。任何人都可以告诉我哪里出错了?

1 个答案:

答案 0 :(得分:1)

嗨,对于每个活动,都会分配一个ID。 请检查是否添加了事件。如果添加了事件,则存储事件ID并在再次保存事件之前检查agin。

获取事件ID:

//save the event id if you want to access this later
NSString *eventId=event.eventIdentifier;

对于未来参考:

// To add event in Calender App

    EKEventStore *store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = @"To meet Chandu.";
        event.startDate = [NSDate date]; //today
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        event.calendar = [store defaultCalendarForNewEvents];
        event.location=@"Sandriver Technologies";
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
        NSLog(@"%@",event.eventIdentifier);  //save the event id if you want to access this later
        eventId=event.eventIdentifier;
    }];



    //to remove event from app

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent* eventToRemove = [store eventWithIdentifier:eventId];
        if (eventToRemove) {
            NSError* error = nil;
            [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
        }
    }];



// Note: Get all event list

  //To get Appropriate calender
    NSCalendar *calendar = [NSCalendar currentCalendar];


    if ([store respondsToSelector:@selector(requestAccessToEntityType:completion:)])
    {
        /* iOS Settings > Privacy > Calendars > MY APP > ENABLE | DISABLE */
        [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
         {
             if ( granted )
             {
                 NSLog(@"User has granted permission!");
                 // Create the start date components
                 NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
                 oneDayAgoComponents.day = -1;
                 NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                               toDate:[NSDate date]
                                                              options:0];

                 // Create the end date components
                 NSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init];
                 oneYearFromNowComponents.year = 1;
                 NSDate *oneYearFromNow = [calendar dateByAddingComponents:oneYearFromNowComponents
                                                                    toDate:[NSDate date]
                                                                   options:0];

                 // Create the predicate from the event store's instance method
                 NSPredicate *predicate = [store predicateForEventsWithStartDate:oneDayAgo
                                                                         endDate:oneYearFromNow
                                                                       calendars:nil];

                 // Fetch all events that match the predicate
                 NSArray *events = [store eventsMatchingPredicate:predicate];
                 NSLog(@"The content of array is%@",events);
             }
             else
             {
                 NSLog(@"User has not granted permission!");
             }
         }];
    }