No se puede crear un calendar de recordatorios en iOS

Estoy tratando de crear un calendar recordatorio para poder agregar y eliminar recordatorios. De hecho, está funcionando bien en los dispositivos que uso (iPhone 5 / 4S / 4), pero en ciertos dispositivos de cliente que todavía son iPhones: recibo este error a continuación sobre la count que no admite recordatorios.

Aquí está el flujo de trabajo:

* Init the event store. * Request permission (check its granted for Reminder types) (iOS6+) for lower we just init. * Create a new calendar, local storage, type = Reminder * Save calendar to get its Identifier. 

Funciona la mayor parte del time, esto aparece en algunos dispositivos,

 Error Domain=EKErrorDomain Code=24 “That account does not support reminders.” 

Los permissions se conceden y se comtestingn en Configuración, Privacidad, Recordatorios. No puedo encontrar nada en los documentos sobre las condiciones bajo las cuales obtendría este error.

¡Gracias!

No estoy seguro si todavía necesitas esto, pero aquí es lo que encontré.

En primer lugar, estoy bastante seguro de que los recordatorios no pueden configurarse en un calendar con una fuente local. Seguí recibiendo la "Esa count no es compatible con recordatorios". Incluso después de configurar todas las properties que no son de solo lectura en el calendar antes de comprometerse con el almacén de events, aún no funcionó. La fuente debe ser calDav. Luego probé la respuesta de Devfly y tampoco funcionó, pero por una razón diferente. Siguió trayendo mi calendar de Gmail que no permite configurar recordatorios (creo que en realidad solo se lee para events y recordatorios). Entonces utilicé el siguiente código para get la fuente real de iCloud

  for (EKSource *source in sources) { NSLog(@"source %@",source.title); if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) { localSource = source; break; } } 

Esta configuration de esta fuente en mi nuevo calendar de recordatorios me funcionó. espero que ayude a alguien

Primero, solo un cheque: estás creando un "nuevo calendar" (un calendar completo), no solo un "nuevo recordatorio", ¿verdad?

Segundo: ¿estás usando iOS6? Los recordatorios están disponibles (en EventKit) solo a partir de iOS6: link

Como lo comentó Jesse Rusak, esto sucede porque probablemente está creando el nuevo calendar dentro de una count / fuente que no admite recordatorios. ¿Cómo se crea el nuevo calendar? ¿Configura la propiedad de origen?

lo primero que puede intentar es hacer un ciclo de todas las fonts hasta que encuentre una adecuada. EKSourceTypeLocal admite recordatorios. iCal también. Aquí una list de EKSourceType

 typedef enum { EKSourceTypeLocal, EKSourceTypeExchange, EKSourceTypeCalDAV, EKSourceTypeMobileMe, EKSourceTypeSubscribed, EKSourceTypeBirthdays } EKSourceType; 

Encuentra uno adecuado:

 // find local source for example EKSource *localSource = nil; for (EKSource *source in store.sources) { if (source.sourceType == EKSourceTypeLocal) // or another source type that supports { localSource = source; break; } } 

Luego, cree el nuevo calendar configurando la fuente correcta

 EKCalendar *cal; if (identifier == nil) { cal = [EKCalendar calendarForEntityType:EKEntityTypeReminder eventStore:store]; cal.title = @"Demo calendar"; cal.source = localSource; [store saveCalendar:cal commit:YES error:nil]; } 

Prueba y avísame

Lo que resolvió mi problema no es save el calendar en la fuente local, sino en EKSourceTypeCalDAV (iCloud). Funciona y se sincroniza en todos los dispositivos.

Es posible que la tienda local no admita recordatorios. Esto es reproducible si iCloud está habilitado.

Esta es la solución más confiable que pude encontrar, sin codificar ningún tipo de supuestos:

  let calendar = EKCalendar(forEntityType: .Reminder, eventStore: eventStore) if eventStore.sources.count == 0 { // reproducible after Reset Content and Settings calendar.source = EKSource() } else { calendar.source = eventStore.defaultCalendarForNewReminders().source } eventStore.saveCalendar(calendar, commit: true)