Skip to main content

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



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.




Comments

  1. 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.

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 3 Final Exam => latest version

1 . Which security protocol or measure would provide the greatest protection for a wireless LAN? WPA2 cloaking SSIDs shared WEP key MAC address filtering   2 . Refer to the exhibit. All trunk links are operational and all VLANs are allowed on all trunk links. An ARP request is sent by computer 5. Which device or devices will receive this message? only computer 4 computer 3 and RTR-A computer 4 and RTR-A computer 1, computer 2, computer 4, and RTR-A computer 1, computer 2, computer 3, computer 4, and RTR-A all of the computers and the router   3 . Refer to the exhibit. Hosts A and B, connected to hub HB1, attempt to transmit a frame at the same time but a collision occurs. Which hosts will receive the collision jamming signal? only hosts A and B only hosts A, B, and C only hosts A, B, C, and D only hosts A, B, C, and E   4 . Refer to the exhibit. Router RA receives a packet with a source address of 192.168.1.65 and a destination address of 192.168.1.161...