So erstellen und speichern Sie EKCalendar auf ios 6
Ich habe ein Problem, wo ich meine EKCalendar und alles sieht gut aus aber wenn ich dann auf go, um die Liste meine Kalender, es nicht zeigen, bis. Ich gehe auch zu überprüfen, meine Liste Kalender in meiner Kalender app, aber es ist nicht existent. Irgendwelche Gedanken?
Hier ist mein button code zu erstellen, meinen Kalender:
- (IBAction)one:(id)sender {
NSString* calendarName = @"My Cal";
EKCalendar* calendar;
//Get the calendar source
EKSource* localSource;
for (EKSource* source in eventStore.sources) {
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
}
if (!localSource)
return;
calendar = [EKCalendar calendarWithEventStore:eventStore];
calendar.source = localSource;
calendar.title = calendarName;
NSError* error;
bool success= [eventStore saveCalendar:calendar commit:YES error:&error];
if (error != nil)
{
NSLog(error.description);
//TODO: error handling here
}
NSLog(@"cal id = %@", calendar.calendarIdentifier);
}
Und hier ist mein code für Schaltfläche, um eine Liste der Kalender, aber mein neuer Kalender ist nicht inbegriffen!
- (IBAction)two:(id)sender {
NSArray *calendars = [eventStore calendarsForEntityType:EKEntityTypeEvent];
for (EKCalendar* cal in calendars){
NSLog(@"%@",cal.title);
}
}
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe eine Lösung gefunden. Das problem ist, dass wenn iCloud Kalender eingeschaltet, es blendet die lokal erstellt, aus der Kalender-app. Um zu umgehen dieses problem die Lösung ist, fügen Sie einen neuen Kalender in iCloud Quelle:
Ich hatte dieses problem auch. Meine Lösung ist fast wie die anderen Antworten, aber ich benutze ein weiterer Weg, um die Instanz von EKSource.
Als schriftliche Dokumentation:
So, ich benutze diesen code, um die richtige EKSource:
ABER wenn du einen anderen Kalender wie Gmail (oder Yahoo etc..), Sie können nicht hinzufügen, Ihre Kalender, um zu seiner Quelle.
In diesem seltenen Fall nutze ich eine vollständige Suche:
Haben Sie versucht, die überprüfung der Autorisierung festlegen, um sicherzugehen, dass der Benutzer die Berechtigung erteilt hat, auf den Speicher zugreifen?
Für
EKEventStore
Dokumentation:Wichtig: Falls Ihre app noch nie beantragt haben, bevor, müssen Sie den Zugang beantragen, um Ereignisse oder Erinnerungen, bevor Sie versuchen zu Holen, oder erstellen Sie Sie. Wenn Sie Daten anfordern, bevor der Benutzer aufgefordert wird, für den Zugriff mit dieser Methode müssen Sie zum zurücksetzen der event-store mit der reset-Methode, damit zu beginnen, den Empfang der Daten, sobald der Benutzer Zugriff gewährt wird.
Dem lokalen Speicher möglicherweise nicht unterstützt Veranstaltungen. Dies ist reproduzierbar, wenn iCloud aktiviert ist.
Dies ist die zuverlässigste Lösung, die ich finden konnte, ohne hard-coding Annahmen:
Hatte ich das gleiche problem. Ich Tat, wie sixthcent vorgeschlagen und hatte die app um Erlaubnis bitten. Das löste eine Teil, aber der Kalender nicht auftauchen, doch wurde erstellt gemäß der NSLogs. Ich hatte ein Exchange-Kalender (ich habe nicht über iCloud) auf mein Handy und hatte, um es auszuschalten. Sobald das gelöscht wurde, es zeigte sich als einen Lokalen Kalender. Als ich ging zurück zu re-hinzufügen von Exchange-fragte er, wenn ich wollte zu halten und jetzt beide Kalender angezeigt werden. Hier ist mein code unten.
Die Lösung Massimo Oliviero hat nicht funktioniert für mich. Ich hatte das gleiche Problem. Ich war die Schaffung Kalender nach aufrufen
requestAccessToEntityType
.Was für mich gearbeitet ist nach Erhalt der Erlaubnis, die ich neu initialisiert den
EventStore
Objekt. Es war wie die Berechtigungen waren noch nie upadted.In CalendarManager
Ich würde nicht empfehlen, die top-Antwort, da es stützt sich auf die überprüfung für die "iCloud" als name, was kann durch den Benutzer geändert werden. Wenn Sie nur wollen, um sicherzustellen, dass der Kalender gespeichert wird und man nicht unbedingt darauf, was Quelle, die er bekommt, Sie könnten dies tun: