2012-05-10 60 views
7

Piszę aplikację, która zajmuje się kalendarzy. W aplikacji wyświetlam listę wszystkich dostępnych kalendarzy, które użytkownik może włączyć lub wyłączyć. Jestem nie przy użyciu szkieletu EventKitUI dla celów mojego własnego projektu i interfejsu użytkownika.Jak zdecydować, czy domyślny "Kalendarz" EKCalendar może być ukryty?

Dostaję uporządkowaną listę kalendarzy poprzez sondowanie właściwości calendars obiektu EKEventStore. Na moim urządzeniu istnieje jednak obiekt EKCalendar z tej listy, który jest , a nie przedstawiony przez EKEventKitUI. To jest opis obiektu w debuggera:

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

Biegnę mój iPhone w języku polskim, dlatego tytuł brzmi „Agenda”, a nie „Kalendarz”, ale jeśli uruchomić iPhone w języku angielskim to właśnie zobaczysz. Wygląda na to, że jest to domyślny kalendarz systemu iOS, ale ponieważ wszystkie moje kalendarze skonfigurowane do synchronizacji z usługą iCloud są wyłączone w przypadku wbudowanych aplikacji kalendarza. Chcę wyłączyć to również w mojej aplikacji, ale nie wiem jak.

Nie mogę rozpoznać, który kalendarz powinienem "ukryć", patrząc na the properties of EKCalendar. Istnieje własność type, która jest "Lokalna" dla tego domyślnego kalendarza, ale jeśli ktoś nie używa iCloud, wyobrażam sobie, że wszystkie kalendarze są typu lokalnego. subscription też nie jest, ani nie jest allowsContentModifications. Widziałem examples of people hiding the default calendar based on it's title, ale jak widać, tytuł jest zlokalizowany, a przez to bardzo niepraktyczny, po prostu źle się czuje.

Co należy zrobić, aby zdecydować, który kalendarz jest kalendarzem domyślnym i czy go ukrywać, czy też nie, w celu wyrównania listy kalendarzy wyświetlanych w zwykłej aplikacji iCal/Kalendarz?

EDIT: Chociaż pytanie zostało oznaczone jako odpowiedzi, odpowiedź zawiera duże „Nie, nie mogę”. Rozwiązałem ten problem dla moich użytkowników, dodając przełącznik panelu ustawień, aby "ukryć lokalne kalendarze", ale jest to bardzo, bardzo nieeleganckie rozwiązanie.

Odpowiedz

5

Aby odpowiedzieć na pytanie pisane pogrubioną czcionką, nie można użyć magicznej właściwości do określenia, czy kalendarz ma być ukryty, czy wyświetlany.

Jeśli jednak Twoja teoria jest prawidłowa, że ​​aplikacja Kalendarz ukrywa kalendarz "lokalny", jeśli dostępne są inne typy kalendarzy (iCloud/MobileMe, Exchange, CalDAV itp.), Możesz odzwierciedlić jego logikę w kodzie za pomocą EKSource tablica w 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; 
    } 

można znaleźć pełną listę EKSourceType stałych tutaj: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

+0

Tak że to, co robię teraz, ale to czuje się tak źle też! – epologee

Powiązane problemy