2016-07-15 74 views
1

在我的应用我加入了一个事件,设备calendar.I正在做这样的Ekevents在日历中添加多次?

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

但问题是相同的事件被默认日历添加多次。可有人告诉我,我要去的地方错误?

+0

@Nirav由于某种原因,我不能够使用事件标识符。所以这就是易正在做这样 – hacker

+0

您错误标记我而不是SagarShirbhate :) –

回答

1

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

对于越来越事件ID:

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

对于未来Refernce:

// 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]; 
     [email protected]"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!"); 
      } 
     }]; 
    } 
+0

如果此答案解决您的问题,请使其正确。 –

+0

由于某种原因,我不能使用事件标识符。因此,我试图访问的event.becoz笔记属性多数民众赞成在唯一的事情,我有 – hacker

+0

你可以检查与所有事件是在特定的日子,你在哪里添加一个事件。 –