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

前端 未结 2 1313
不思量自难忘°
不思量自难忘° 2020-12-23 22:10

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 accordi

相关标签:
2条回答
  • 2020-12-23 22:15
     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

    0 讨论(0)
  • 2020-12-23 22:39

    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.

    0 讨论(0)
提交回复
热议问题