recordatorios - como usar calendario iphone 7
No se puede crear un calendario recordatorio en iOS (4)
Lo que resolvió mi problema no es guardar el calendario en la fuente local, sino en EKSourceTypeCalDAV
(iCloud). Funciona y se sincroniza en todos los dispositivos.
Intento crear un calendario recordatorio para poder agregar y eliminar recordatorios. En realidad, está funcionando bien en los dispositivos que uso (iPhone 5 / 4S / 4) pero en ciertos dispositivos cliente que todavía son iPhones: estoy recibiendo este error a continuación sobre la cuenta 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 tiempo, esto aparece en algunos dispositivos:
Error Domain=EKErrorDomain Code=24 “That account does not support reminders.”
Los permisos se otorgan y verifican en Configuración, Privacidad, Recordatorios. No puedo encontrar nada en los documentos sobre las condiciones bajo las cuales obtendría este error.
¡Gracias!
Primero, solo un cheque: estás creando un "nuevo calendario" (un calendario completo), no solo un "nuevo recordatorio", ¿verdad?
Segundo: ¿estás usando iOS6? Los recordatorios están disponibles (en EventKit) solo a partir de iOS6: enlace
Como comentó Jesse Rusak, esto sucede porque probablemente estés creando el nuevo calendario dentro de una cuenta / fuente que no admite recordatorios. ¿Cómo se crea el nuevo calendario? ¿Estableces la propiedad de origen?
lo primero que puede intentar es pasar todas las fuentes hasta que encuentre una adecuada. EKSourceTypeLocal admite recordatorios. iCal también. Aquí una lista 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, crea el nuevo calendario 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
No estoy seguro de si todavía necesita esto, pero aquí es con lo que me encontré.
En primer lugar, estoy bastante seguro de que los recordatorios no se pueden configurar en un calendario con una fuente local. Seguí recibiendo el mensaje "Esa cuenta no admite recordatorios". Incluso después de configurar todas las propiedades que no son de solo lectura en el calendario antes de comprometerse con la tienda de eventos, todavía no funcionaba. La fuente debe ser calDav. Luego probé la respuesta de Devfly y tampoco funcionó, pero por una razón diferente. Siguió buscando mi calendario de gmail que no permite configurar recordatorios (creo que en realidad solo se lee para eventos y recordatorios). Así que utilicé el siguiente código para obtener 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 configuración de esta fuente en mi nuevo calendario de recordatorios funcionó para mí. Espero que ayude a alguien
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 ninguna suposición:
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)