【问题标题】:Ekevents gets adding multiple times in calendar?Ekevents 在日历中多次添加?
【发布时间】:2016-11-18 15:09:29
【问题描述】:

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

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"];                             
     }
}                                 

但问题是在默认日历中多次添加相同的事件。谁能告诉我哪里出错了?

【问题讨论】:

  • @Nirav 出于某种原因我无法使用事件标识符。所以我就是这样做的
  • 你错误地标记了我而不是 SagarShirbhate :)

标签: ios iphone ipad icalendar ekeventstore


【解决方案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!");
             }
         }];
    }

【讨论】:

  • 如果此答案解决了您的问题,请改正。
  • 由于某种原因我无法使用事件标识符。所以我正在尝试访问事件的 notes 属性。因为这是我拥有的唯一独特的东西
  • 您可以检查所有事件发生在您添加事件的特定日期。
  • 如果我卸载应用程序,它的唯一值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多