business objective-c ios icalendar eventkit

objective-c - business - dropbox api rest



Funcionalidad del calendario de aplicaciones ya no funciona en ios 6 (5)

Creo que tengo exactamente el mismo problema. Estoy implementando una versión de desarrollador normal de la aplicación en la que estoy trabajando en mi iPhone 4 con iOS 6.

EDIT: Finalmente lo resolví de esta manera, no encontré la información en la web, sino que la encontré en las API.

Ejecuta lo siguiente para solicitar permiso. Aparentemente, esto es una llamada asíncrona y el acceso no se otorgará hasta que el usuario haya autorizado la aplicación.

EKEventStore *es = [[EKEventStore alloc] init]; [es requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { /* This code will run when uses has made his/her choice */ }];

Además, puede especificar qué intenta hacer la aplicación con la información en Info.plist. Hay una clave llamada Privacidad - Descripción del uso de calendarios (NSCalendarsUsageDescription) que puede contener una descripción de cadena que se mostrará en el aviso al usuario.

A continuación se muestran los detalles completos del problema que encontré (corregido por lo anterior):

Cuando intento adjuntar un evento al calendario, veo la siguiente pantalla:

Cuando abro la configuración de la configuración de privacidad del calendario, no hay ninguna aplicación visible:

Todo esto me lleva a pensar que hay una configuración que debo poner en Info.plist para habilitar el acceso al calendario y pedir permiso al usuario para iniciar. He buscado en la web pero no he encontrado nada.

@jloewy, supongo que este es el mismo problema que estás teniendo.

En la aplicación que estoy desarrollando actualmente hay una interacción entre el usuario y el calendario de los usuarios, como lo que sucede en muchas aplicaciones, cosas muy estándar. Funcionó bien hasta que actualicé a ios 6. Ahora me encuentro con el cuadro de diálogo "Esta aplicación no tiene acceso a sus calendarios. Puede habilitar el acceso en la Configuración de privacidad" cuando intento realizar esas mismas funciones de calendario pero mi aplicación sí No aparece en la configuración de privacidad del calendario del dispositivo. ¿Hay alguna nueva API que deba usar para pedirle al usuario que otorgue acceso?

Muchas gracias por ayudarme con este problema, cualquiera que pueda ayudar.


Habrá una ventana emergente que solicita permiso al usuario antes de permitir que la aplicación acceda a la información del calendario. Si no permitió que la aplicación acceda al calendario, debe permitir explícitamente que la aplicación acceda al calendario al incluir en la lista blanca la aplicación en la configuración.


Si desea esperar a que el usuario responda a la solicitud, podría agregar algunas líneas de código a la respuesta aceptada:

__block BOOL accessGranted = NO; if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { dispatch_semaphore_t sema = dispatch_semaphore_create(0); [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { accessGranted = granted; dispatch_semaphore_signal(sema); }]; dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); } else { // we''re on iOS 5 or older accessGranted = YES; } if (accessGranted) { // go on }


Si planea admitir dispositivos antes de iOS 6, agregaría lo siguiente, de lo contrario, obtendrá un error.

EKEventStore *store = [[EKEventStore alloc] init]; if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { /* This code will run when uses has made his/her choice */ }]; }


Solicitará el permiso solo una vez y para la próxima vez que recuerde la elección. Si no permite el acceso al calendario, no solicitará la próxima vez y no permitirá agregar un evento al calendario.

Si desea restablecer esta configuración, debe eliminar la "Configuración de privacidad" y solo se le solicitarán los permisos una vez que la aplicación intente acceder al calendario mediante la API RequestAccessToEntityType.

http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html