2016-09-20 2 views
2

Ich arbeite an einer iOS-App, die erstellt, aktualisiert und löscht EKEvents. Dies kann leicht erreicht werden, indem die Ereignisse unter EKEventStore.defaultCalendarForNewEvents gespeichert werden. Unter welchen Umständen möchte ich eine neue EKCalendar für meine eigene App erstellen und welche Funktionalität beinhaltet das?Geeignete Situationen zum Erstellen eines neuen EKCalenders iOS

Ich frage, weil ich gerade versuche, einen Kalender in Swift 3.0 zu erstellen, und es weiterhin versagt, was mich umherwandern lässt, was der Zweck des neuen Kalenders überhaupt ist.

fileprivate var eventStore = EKEventStore() 
fileprivate var newCalendar : EKCalendar? 

func createNewCalendar() { 
    self.newCalendar = EKCalendar(for: .event, eventStore: self.eventStore) 
    self.newCalendar!.title = "newCal" 
    let sourcesInEventStore = self.eventStore.sources 
    self.newCalendar!.source = eventStore.defaultCalendarForNewEvents.source 

    let newCalIndex = sourcesInEventStore.index {$0.title == "newCal"} 
    if newCalIndex == nil { 
     do { 
      try self.eventStore.saveCalendar(self.newCalendar!, commit: true) 
      print("cal succesful") 
     } catch { 
      print("cal failed") 
     } 
    } 
} 

Ich weiß, ich habe Zugriff auf die eventStore, weil ich in den Ereignissen ziehen können sowie speichern Sie sie auf dem EKEventStore.defaultCalendarForNewEvents und aktualisieren sie ihre bestehenden Kalender verwenden.

Antwort

0

Es gibt viele Gründe, warum Sie einen neuen Kalender erstellen möchten. Persönlich wähle ich einen neuen Kalender, wenn ich eine Gruppe von Ereignissen von denen trennen möchte, die erstellt und an die Standard-Ereignisse gebunden wurden. Auf diese Weise profitieren Sie auch vom Massenlöschung dieser neu erstellten Ereignisse, wenn Sie denken, dass Sie sie nicht benötigen. Löschen Sie einfach den Kalender und alle seine Ereignisse werden ebenfalls gelöscht.

By the way, wenn Sie nicht sicher sind, was die source sein sollte (iCloud, lokal, vielleicht bis zu einem gewissen Mail-Konto usw. gebunden) des Kalenders, den Sie erstellen möchten, verwenden Sie einfach die Quelle der Standard ein:

let newCalendar = EKCalendar(forEntityType: .Event, eventStore: eventStore) 
newCalendar.source = eventStore.defaultCalendarForNewEvents.source 

Vergewissern Sie sich auch, dass die allowsContentModifications Eigenschaft Standardkalender gibt true, wenn Sie die Quelle verwenden möge sonst ist es sehr wahrscheinlich, dass Sie nicht in der Lage sein werden, eine Veranstaltung im Rahmen des neuen Kalender zu erstellen.

+0

Haben Sie diesen Code getestet? Ich habe das für ein paar Stunden probiert und jedes Mal, wenn es versucht zu speichern, scheitert es. Ich habe sogar Ihren Code wortwörtlich kopiert und eingefügt, ohne Erfolg. –

+0

Was ist der Wert von "eventStore" in Ihrem Programm? Es muss eine 'EKEventStore'-Instanz sein, nicht das Klassenobjekt. Bitte zeigen Sie uns den Code und die Fehlermeldung in Ihrer Frage. – ozgur

+0

Frage aktualisiert –

Verwandte Themen