Search code examples
iosswiftswift2ekeventekeventstore

How to set a default alert in the calendar?


Trying to add an even to my user's calendar, but not sure how to set the default alerts. What I have is this so far:

func createEvent(item: Item) {
        let eventStore = EKEventStore()

        eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { (granted, error) in
            if granted && error == nil {
                let event = EKEvent(eventStore: eventStore)
                event.title = item.name
                event.startDate = item.StartDate
                event.endDate = item.endDate
                event.notes = item.description
                event.calendar = eventStore.defaultCalendarForNewEvents

                let alarm1hour = EKAlarm(relativeOffset: 3600) //1 hour
                let alarm1day = EKAlarm(relativeOffset: 86400) //1 day
                event.addAlarm(alarm1day)
                event.addAlarm(alarm1hour)

                // prompt user to add event (to whatever calendar they want)
                let controller = EKEventEditViewController()
                controller.event = event
                controller.eventStore = eventStore
                controller.editViewDelegate = self

                self.presentViewController(controller, animated: true, completion: nil)

            } else {
                self.dismissViewControllerAnimated(true, completion: {})
            }
        })
    }

I assumed that alarm = alert, but this doesn't seem to do anything. How can I set an alert for 1 day before the event, and another for 1 hour before the event?


Solution

  • From the documentation for EKAlarm(relativeOffset:):

    Negative offset values fire before the start of the event, while positive values fire after the start.

    I would try the following:

    let alarm1hour = EKAlarm(relativeOffset: -3600) //1 hour
    let alarm1day = EKAlarm(relativeOffset: -86400) //1 day
    

    Note: you may want to use an absolute time for the "one day before" alarm due to daylight savings time changes.