2016-09-20 57 views
2

我正在创建,更新和删除EKEvents的iOS应用程序。这可以通过将事件保存到EKEventStore.defaultCalendarForNewEvents来轻松完成。在什么情况下,我会为我自己的应用程序创建一个新的EKCalendar,并且需要哪些功能?适当的情况下创建新的EKCalendar iOS

我在问,因为我目前正试图在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并使用他们现有的日历更新它们。

回答

0

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

顺便说一句,如果你不知道应该是什么source(icloud的,本地的,也许绑一些电子邮件帐户等),你想创建,只使用一个默认的来源日历

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

还要确保默认日历的allowsContentModifications财产,如果你想使用它的来源,否则它很可能,你将无法在新的日历中创建一个事件返回true

+0

你测试过这段代码吗?我一直在尝试这个几个小时,每次尝试保存失败。我甚至逐字复制和粘贴你的代码无济于事。 –

+0

程序中'eventStore'的价值是什么?它必须是一个'EKEventStore'实例,而不是类对象。请向我们展示您的问题中的代码和错误消息。 – ozgur

+0

问题已更新 –