适合创建新EKCalendar iOS的情况

时间:2016-09-20 02:45:01

标签: ios eventkit ekevent

我正在开发一款可以创建,更新和删除EKEvents的iOS应用。通过将事件保存到EKEventStore.defaultCalendarForNewEvents可以轻松完成此操作。在什么情况下我想为自己的应用创建一个新的EKCalendar以及它需要什么功能?

我在问,因为我正在尝试在Swift 3.0中创建一个日历并且它一直在失败,这使我不知道新日历的目的是什么。

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")
        }
    }
}

我知道我可以访问eventStore因为我可以提取事件并将其保存到EKEventStore.defaultCalendarForNewEvents并使用现有日历更新它们。

1 个答案:

答案 0 :(得分:0)

您可能有很多原因需要创建新日历。就个人而言,当我想将一组事件与创建的事件分开并绑定到默认事件时,我选择创建一个新日历。通过这种方式,当您认为不需要时,您还可以利用批量删除这些新创建的事件。只需删除日历,它的所有事件也将被清除。

顺便说一下,如果您不确定要创建的日历应该是source (iCloud,本地,可能与某些邮件帐户等相关联。),只需使用默认来源:

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

如果您想使用其来源,请确保默认日历的allowsContentModifications属性返回true,否则您很可能无法创建新日历中的活动。