2012-05-10 14 views
7

Estoy escribiendo una aplicación que se ocupa de calendarios. En la aplicación, estoy mostrando una lista de todos los calendarios disponibles para que el usuario los habilite o deshabilite. Estoy no usando el marco EventKitUI para propósitos de mi propio diseño y UI.¿Cómo decidir si se puede ocultar el 'Calendario' predeterminado de EKCalendar?

Obtengo una lista ordenada de calendarios al sondear la propiedad calendars de un objeto EKEventStore. En mi dispositivo, sin embargo, hay un objeto EKCalendar en esa lista que es no mostrado por EKEventKitUI. Esta es una descripción del objeto en el depurador:

EKCalendar <0xcea6b60> {title = Agenda; type = Local; allowsModify = YES; color = #711A76;} 

estoy corriendo mi iPhone en holandés, por lo que el título es 'Agenda' y no 'Calendario', pero si se ejecuta el iPhone en Inglés eso es lo que verás Parece que este es el calendario predeterminado de iOS, pero como tengo todos mis calendarios configurados para sincronizar con iCloud, está deshabilitado para las aplicaciones de calendario integradas. También quiero desactivarlo en mi propia aplicación, pero no sé cómo.

Al mirar the properties of EKCalendar no puedo discernir uno para decidir qué calendario debo 'ocultar'. Está la propiedad type que es 'Local' para este calendario predeterminado, pero si alguien no está usando iCloud, imagino que todos los calendarios son de un tipo local. subscription tampoco lo es, ni es allowsContentModifications. He visto examples of people hiding the default calendar based on it's title, pero como pueden ver, el título está localizado y, por lo tanto, es muy poco práctico, simplemente se siente mal.

¿Cuál es el truco para decidir qué calendario es el predeterminado y si se debe ocultar o no, para alinear la lista de calendarios que muestra su aplicación regular iCal/Calendar?

EDIT: Aunque la pregunta se marca como respondida, la respuesta contiene un gran "no, no se puede". He resuelto este problema para mis usuarios al agregar un interruptor del panel de configuración a "ocultar calendarios locales", pero es una solución muy, muy poco elegante.

Respuesta

5

Para responder a su pregunta en negrita, no hay una propiedad de magia que pueda usar para determinar si un calendario debe ocultarse o mostrarse.

Sin embargo, si su teoría es correcta acerca de la aplicación Calendario ocultando el calendario "local" si hay otros tipos de calendario disponibles (iCloud/MobileMe, Exchange, CalDAV, etc.), puede reflejar su lógica en su código utilizando el EKSource matriz en EKEventStore

EKEventStore *store = [[EKEventStore alloc] init]; 

for (EKSource *source in store.sources) 
    if (source.sourceType == EKSourceTypeExchange || source.sourceType == EKSourceTypeCalDAV) 
    { 
     //Your custom logic here to determine if the local cal should be hidden. 
     break; 
    } 

puede encontrar la lista completa de los constantes EKSourceType aquí: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

+0

Sí eso es lo que estoy haciendo ahora, pero esto se siente tan mal también! – epologee

Cuestiones relacionadas