2012-05-10 17 views
7

Sto scrivendo un'app che si occupa di calendari. Nell'applicazione sto visualizzando un elenco di tutti i calendari disponibili che l'utente può abilitare o disabilitare. Sono non utilizzando il framework EventKitUI per gli scopi del mio design e dell'interfaccia utente.Come decidere se il "calendario" EKCalendar predefinito può essere nascosto?

Ottengo un elenco ordinato di calendari eseguendo il polling della proprietà calendars di un oggetto EKEventStore. Sul mio dispositivo, tuttavia, c'è un oggetto EKCalendar nell'elenco che è non mostrato dallo EKEventKitUI. Questa è una descrizione dell'oggetto nel debugger:

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

Io corro il mio iPhone in olandese, che è il motivo per cui il titolo è 'Agenda' e non 'calendario', ma se si esegue l'iPhone in inglese questo è quello che vedrai. Sembra che questo sia il calendario predefinito di iOS, ma dal momento che ho tutti i miei calendari impostati per la sincronizzazione con iCloud, è disabilitato per le app di calendario integrate. Voglio disabilitarlo anche nella mia app, ma non so come.

Dall'aspetto the properties of EKCalendar Non riesco a distinguerne uno per decidere quale calendario dovrei "nascondere". C'è la proprietà type che è "Locale" per questo calendario predefinito, ma se qualcuno non sta usando iCloud immagino che tutti i calendari siano di un tipo locale. subscription non lo è neanche, né è allowsContentModifications. Ho visto examples of people hiding the default calendar based on it's title, ma come potete vedere, il titolo è localizzato e quindi molto poco pratico, che sembra sbagliato.

Qual è il trucco per decidere quale calendario è il calendario predefinito e se nasconderlo o meno, al fine di confrontare l'elenco dei calendari visualizzati dall'app normale di iCal/Calendar?

EDIT: Anche se la questione è stata contrassegnata come risposta, la risposta contiene un grande "no, non è possibile". Ho risolto questo problema per i miei utenti aggiungendo un interruttore del pannello delle impostazioni per "nascondere i calendari locali", ma è una soluzione molto, molto poco elegante.

risposta

5

Per rispondere alla tua domanda in grassetto, non esiste una proprietà magica che puoi utilizzare per determinare se un calendario deve essere nascosto o visualizzato.

Tuttavia, se la tua teoria è corretta sull'app Calendario nascondendo il calendario "locale" se sono disponibili altri tipi di calendario (iCloud/MobileMe, Exchange, CalDAV, ecc.), Allora puoi rispecchiare la logica nel tuo codice usando il EKSource array in 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; 
    } 

È possibile trovare l'elenco completo delle costanti EKSourceType qui: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

+0

Sì questo è quello che sto facendo ora, ma questo si sente anche in modo sbagliato! – epologee

Problemi correlati