Showing posts with label iCal. Show all posts
Showing posts with label iCal. Show all posts

Monday, September 19, 2011

Programmatically create iCal event

If you want iCal like calendar using iPhone sdk download it from 
git hub repository: Click here


After downloading iCal want to create programmatically event then check this:


Process for creating programmatically event:


-(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;

}