使用 EventKit 添加事件和日历

Posted

技术标签:

【中文标题】使用 EventKit 添加事件和日历【英文标题】:Adding events and calendars with EventKit 【发布时间】:2015-03-11 17:47:00 【问题描述】:

我需要在用户日历中添加一个事件。

所以我得到了他所有的日历:

let calendars = store.calendarsForEntityType(EKEntityTypeEvent)
        as [EKCalendar]

我有几个问题:

    我怎么知道要将活动添加到哪个日历中 我可以向用户显示他的所有日历并让他选择,但在这个列表中我得到 [日历、日历、生日、生日] 我每个日历都拿了两次,那我拿哪一个呢? 有没有办法为添加事件添加新日历?

谢谢

【问题讨论】:

您是否尝试使用或不使用 Apple 的 EventKitUI 框架添加事件? 我问是因为很多人都知道 EventKit 框架,但不知道提供标准模式视图控制器用于添加事件的 EventKitUI 框架 谢谢,但我需要添加从服务器而不是用户获取的事件 【参考方案1】:

为了创建一个新日历,您应该创建它并将 id 存储在 NSUserDefaults 中,以便下次检索它。如果日历存在,我使用以下函数获取日历,如果不存在则创建它:

func getCalendar() -> EKCalendar? 
    let defaults = NSUserDefaults.standardUserDefaults()

    if let id = defaults.stringForKey("calendarID") 
        return store.calendarWithIdentifier(id)
     else 
        var calendar = EKCalendar(forEntityType: EKEntityTypeEvent, eventStore: self.store)

        calendar.title = "My New Calendar"
        calendar.CGColor = UIColor.redColor()
        calendar.source = self.store.defaultCalendarForNewEvents.source

        var error: NSError?
        self.store.saveCalendar(calendar, commit: true, error: &error)

        if error == nil 
            defaults.setObject(calendar.calendarIdentifier, forKey: "calendarID")
        

        return calendar
    

现在您可以在创建新活动时使用此日历,以便将活动添加到此日历中:

func addEvent() 
    var newEvent = EKEvent(eventStore: self.store)
    newEvent.title = someTitle
    newEvent.location = someLocation
    newEvent.startDate = someStartDate
    newEvent.endDate = someEndDate
    newEvent.notes = someMoreInfo
    newEvent.calendar = getCalendar()

    self.store.saveEvent(newEvent, span: EKSpanThisEvent, commit: true, error: nil)

【讨论】:

ios 8 中(可能在此之前)我收到错误“无法将 'UIColor' 类型的值分配给 'CGColor' 类型的值”。更改为 UIColor.redColor().CGColor 为我解决了这个问题。 很好的提示,只是缺少访问请求,我在这里找到了它***.com/a/28398477/3027848

以上是关于使用 EventKit 添加事件和日历的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4.0 Eventkit 无法正确获取日历和事件

如何区分通过我的应用程序保存的事件和使用 EventKit 使用日历应用程序保存的事件?

EventKit 日历的最后一个事件

将 EventKit 事件与远程数据库同步

使用 EventKit 对 iOS 日历进行文本搜索

如何从日历中获取我的应用程序的事件?