Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I programmatically create an iCal event in the default calendar?

Tags:

How can I use Objective-C to programmatically create an iCal event in the default calendar? I want to check whether the event already exists and set the button state accordingly.

like image 571
codeburger Avatar asked Aug 06 '10 11:08

codeburger


2 Answers

An example of how to programmatically create an iCAL event in the default calendar, using Objective-C. The code checks if the event already exists, and sets the button state accordingly. Here is the code by @codeburger:

-(void)initCalendar {   // An array of 1 dictionary object, containing START and END values.  NSMutableArray* pvDict  = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:PV_URL ]];   // Check if the private view event already exists in the default calendar.  // Then set the calendar button state.   // Get a entry point to the Calendar database.  self.store = [[EKEventStore alloc ] init ];   // Get an array of all the calendars.  NSArray *calendars = store.calendars;   // Get the default calendar, set by the user in preferences.  EKCalendar *defaultCal = store.defaultCalendarForNewEvents;   // Find out if this calendar is modifiable.   BOOL isDefaultCalModifiable = defaultCal.allowsContentModifications ;   // Create an event in the default calendar.    self.event = [ EKEvent eventWithEventStore:store ];   self.event.title = CHELSEA_SPACE ;  self.event.location = CHELSEA_ADDRESS ;   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  [dateFormatter setDateFormat:@"yyy-MM-dd HH:mm:ss.S"];   NSString *startString = [[ pvDict objectAtIndex:0] objectForKey:@"starts" ];  NSDate *dateStart = [dateFormatter dateFromString:startString];   NSString *endString = [[ pvDict objectAtIndex:0] objectForKey:@"ends" ];  NSDate *dateEnd = [dateFormatter dateFromString:endString];      self.event.startDate = dateStart;  self.event.endDate   = dateEnd;    self.event.calendar = defaultCal ;   // Alternative code to add 2.5 hours to start time.  // [[NSDate alloc] initWithTimeInterval:9000 sinceDate:event.startDate];   // Search for events which match this date/time start and end.  // Compare the matched events by event TITLE.   NSPredicate *predicate = [store predicateForEventsWithStartDate:event.startDate             endDate:event.endDate calendars:calendars];   NSArray *matchingEvents = [store eventsMatchingPredicate:predicate];   self.calendarButton.enabled = NO;   if( ! isDefaultCalModifiable ) {   // The default calendar is not modifiable   return ;  }    if ( [ matchingEvents count ] > 0 ) {    // There are already event(s) which match this date/time start and end.    // Check if this event is the PV    EKEvent *anEvent;     int j;    for ( j=0; j < [ matchingEvents count]; j++) {     anEvent = [ matchingEvents objectAtIndex:j ] ;    if([ CHELSEA_SPACE isEqualToString: anEvent.title ]) {     // PV event already exists in calendar.     return;    }   }   [ anEvent release ];  }   self.calendarButton.enabled = YES;   [ pvDict release ]; }  -(void)addEventToCalendar:(id)sender {   NSError *error;  BOOL saved = [self.store saveEvent:self.event span:EKSpanThisEvent error:&error];    NSLog(@"Saved calendar event = %@\n", (saved ? @"YES" : @"NO"));  self.calendarButton.enabled = NO;  } 

I've seen this question with no answer and felt like it should be edited giving full credit to @codeburger.

like image 193
2 revs Avatar answered Oct 05 '22 08:10

2 revs


 EKEventStore *eventStore = [[EKEventStore alloc] init];   EKEvent *event = [EKEvent eventWithEventStore:eventStore];  NSDate *date = [[NSDate alloc ]init];//today,s date  event.title = @"remainder";//title for your remainder   event.startDate=date;//start time of your remainder  event.endDate = [[NSDate alloc] initWithTimeInterval:1800 sinceDate:event.startDate];//end time of your remainder   NSTimeInterval interval = (60 *60)* -3 ;  EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:interval]; //Create object of alarm   [event addAlarm:alarm]; //Add alarm to your event   [event setCalendar:[eventStore defaultCalendarForNewEvents]];   NSError *err;   NSString *ical_event_id;   //save your event  if([eventStore saveEvent:event span:EKSpanThisEvent error:&err]){         ical_event_id = event.eventIdentifier;         NSLog(@"%@",ical_event_id);  }   for more info check this link 

sample for EKEvent

like image 25
iKushal Avatar answered Oct 05 '22 08:10

iKushal