2010-08-06 9 views
23

¿Cómo puedo usar Objective-C para crear programáticamente un evento iCal en el calendario predeterminado? Quiero verificar si el evento ya existe y establecer el estado del botón en consecuencia.¿Cómo puedo crear un evento iCal mediante programación en el calendario predeterminado?

+0

¿Cuál es tu pregunta? – RunLoop

+2

No es una pregunta. Es un buen fragmento para gente como yo que busca un ejemplo sólido. –

+24

¿Puedes editar la pregunta * para convertirla en una pregunta * y luego agregar el fragmento como respuesta? Si lo haces, puedes seleccionar el tuyo como la respuesta correcta. Puede parecer extraño, pero es la forma preferida de lidiar con situaciones como esta. – Will

Respuesta

15

Un ejemplo de cómo crear mediante programación un evento iCAL en el calendario predeterminado, utilizando Objective-C. El código verifica si el evento ya existe y establece el estado del botón en consecuencia. Aquí está el código por @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; 

} 

que he visto esta pregunta sin respuesta y sentí que debería editarse dar crédito a @codeburger.

9
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

Cuestiones relacionadas