2012-05-10 4 views
7

Ich schreibe eine App, die sich mit Kalendern beschäftigt. In der App zeige ich eine Liste aller verfügbaren Kalender an, die der Benutzer aktivieren oder deaktivieren kann. Ich bin nicht mit dem EventKitUI Framework für Zwecke meines eigenen Designs und UI.Wie kann ich entscheiden, ob der Standard EKCalendar 'Kalender' ausgeblendet werden kann?

Ich bekomme eine ordentliche Liste von Kalendern durch Abfrage der calendars Eigenschaft eines EKEventStore Objekts. Auf meinem Gerät befindet sich jedoch ein EKCalendar Objekt in dieser Liste, das nicht von EKEventKitUI gezeigt wird. Dies ist eine Beschreibung des Objekts im Debugger:

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

ich mein iPhone auf Niederländisch renne, weshalb der Titel ‚Agenda‘ und nicht ‚Kalender‘, aber wenn man das iPhone auf Englisch läuft Das wirst du sehen. Es sieht so aus, als wäre dies der Standardkalender von iOS, aber da ich alle meine Kalender so eingerichtet habe, dass sie mit iCloud synchronisiert werden, ist sie für die eingebauten Kalender-Apps deaktiviert. Ich möchte es auch in meiner eigenen App deaktivieren, aber ich weiß nicht wie.

Aus Blick auf the properties of EKCalendar kann ich nicht einen für die Entscheidung, welchen Kalender ich "verstecken" sollte. Es gibt die type Eigenschaft, die 'Local' für diesen Standardkalender ist, aber wenn jemand iCloud nicht verwendet, stelle ich mir vor, dass alle Kalender von einem lokalen Typ sind. subscription ist es auch nicht, noch ist allowsContentModifications. Ich habe gesehen examples of people hiding the default calendar based on it's title, aber wie Sie sehen können, ist der Titel lokalisiert und damit sehr unpraktisch, das fühlt sich einfach falsch an.

Was ist der Trick, um zu entscheiden, welcher Kalender der Standardkalender ist und ob er ausgeblendet werden soll oder nicht, um die Liste der Kalender zu parallelisieren, die Ihre normale iCal/Calendar App anzeigt?

EDIT: Obwohl die Frage markiert wurde als beantwortet, die Antwort enthält ein großes „Nein, man kann nicht“. Ich habe dieses Problem für meine Benutzer gelöst, indem ich einen Schalter für das Einstellungsfenster auf "Lokale Kalender ausblenden" gesetzt habe, aber es ist eine sehr, sehr unelegante Lösung.

Antwort

5

Um Ihre Frage fett zu beantworten, gibt es keine magische Eigenschaft, die Sie verwenden können, um zu bestimmen, ob ein Kalender ausgeblendet oder angezeigt werden soll.

Wenn jedoch Ihre Theorie stimmt, dass die Kalenderanwendung den "lokalen" Kalender verdeckt, wenn andere Kalendertypen verfügbar sind (iCloud/MobileMe, Exchange, CalDAV, usw.), können Sie die Logik in Ihrem Code spiegeln 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; 
    } 

Sie die vollständige Liste der EKSourceType Konstanten finden Sie hier: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

+0

Ja, das ist es, was ich jetzt tue, aber das fühlt sich auch so falsch! – epologee