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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With