¿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?
23
A
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
Cuestiones relacionadas
- 1. Crear evento de calendario iCal con PHP
- 2. Agregar evento personalizado mediante programación en el calendario de iPhone
- 3. crear mediante programación un UILabel
- 4. ¿Cómo cancelar un evento de calendario usando archivos ics?
- 5. Cómo crear un contacto mediante programación
- 6. ¿Cómo puedo crear una cadena en C# mediante programación?
- 7. cómo falsificar mediante programación un evento táctil a un UIButton?
- 8. Crear un botón mediante programación en Windows Phone 7 (WP7)
- 9. ¿Cómo puedo reemplazar el calendario predeterminado del sistema operativo Android?
- 10. crear un control mediante programación utilizando MFC
- 11. Iniciar un programa predeterminado en OSX mediante programación
- 12. Cómo crear URLs mediante programación con AngularJS
- 13. Crear mediante programación HTML5 Canvas
- 14. añadir a iCal y Google-calendario botones para una página
- 15. HTML: iCal Link?
- 16. ¿Cómo puedo generar un evento mediante reflejo en .NET/C#?
- 17. crear el archivo XML mediante programación
- 18. ¿Cómo agregar eventos en el calendario predeterminado de Android 4.0?
- 19. Crear reunión de Exchange mediante programación
- 20. ¿Cómo crear subdominios para IIS7 mediante programación?
- 21. ¿Cómo puedo eliminar el silencio de un MP3 mediante programación?
- 22. Modifique mediante programación el "Uso predeterminado para esta acción"
- 23. Cómo crear un calendario simple en android
- 24. Cómo crear un acceso directo mediante programación utilizando Win32
- 25. ejecutar mediante programación el evento táctil en android
- 26. ¿Cómo suscribirse mediante programación a un usuario a un calendario de google usando javascript?
- 27. aumentar mediante programación un comando
- 28. Archivos iCal actualizables bidireccionales en .NET
- 29. ¿Cómo puedo autenticar mediante programación a un usuario en Django?
¿Cuál es tu pregunta? – RunLoop
No es una pregunta. Es un buen fragmento para gente como yo que busca un ejemplo sólido. –
¿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