No se puede agregar evento en el calendar.

Quiero agregar events en el calendar "someName". En caso de que no exista un calendar con el nombre dado, entonces crearé uno programáticamente. Mi problema es que el evento no se agrega cuando localSource (de tipo EKSource) resulta ser nulo. Agregué 3 comprobaciones para asegurarme de get un valor de localSource, pero incluso entonces, en algunos casos localSource es nulo. Entonces, en los events de mi teléfono se agregan pero en el teléfono de mi amigo no lo hacen.

Seguí varias publicaciones y entendí que EKSource puede ser de 6 types: https://developer.apple.com/reference/eventkit/eksourcetype

Lo que no comprendo es en qué casos localSource sería nula? ¿Qué significa esto en el lenguaje normal? ¿Puedo hacer algo con el código para que no sea nulo o el usuario tenga que hacer algo en el dispositivo?

- (void)setCalendar { NSArray *calendars = [self.eventStore calendarsForEntityType:nil]; NSString *calendarTitle = someName; NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"title matches %@", calendarTitle]; NSArray *filtenetworking = [calendars filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]; if ([filtenetworking count]) { self.calendar = [filtenetworking firstObject]; } else { self.calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.eventStore]; self.calendar.title = calendarTitle; EKSource *localSource; for (EKSource *source in self.eventStore.sources) { //if iCloud account is setup then add the event in that calendar if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) { localSource = source; break; } } if (localSource == nil) { for (EKSource *source in self.eventStore.sources) { //if iCloud is not setup then look for local source if (source.sourceType == EKSourceTypeLocal) { localSource = source; break; } } } if (!localSource) { localSource = [self.eventStore defaultCalendarForNewEvents].source; } self.calendar.source = localSource; NSError *calendarErr = nil; BOOL calendarSuccess = [self.eventStore saveCalendar:self.calendar commit:YES error:&calendarErr]; if (!calendarSuccess) { NSLog(@"Error while updating calendar %@", calendarErr); } } 

}

PD: Tengo permiso para agregar events del calendar.

La fuente local muestra los campos como 'en mi iphone', 'icloud', 'gmail' en el calendar del usuario. En mi código, la fuente local es nula cuando el usuario ha configurado la count icloud, pero no dio permissions a la count icloud para escribir en el calendar. Entonces, incluso si la aplicación tiene permiso para escribir en el calendar, pero la fuente local es nula, por lo tanto, la adición de un evento a un calendar falla.

Mi código agrega al calendar en los 2 casos dados:

  1. el usuario ha iniciado session en iCloud y ha dado permiso para que iCloud escriba en el calendar. En ese caso, la fuente local no es nil y se crea un calendar con el nombre 'someName' en 'iCloud'.
  2. El usuario no ha iniciado session en iCloud. Ahora, el calendar se crea con el nombre 'someName' en 'en mi fuente local de iPhone'.
    Intereting Posts