Search code examples
iosswifticalendaralarmekevent

How to set specific alarm in EKEvent in ios calendar?


In EKEvent, once i haven't set any alarm to event then i check in calendar app and it show me alert before 5 min. why ? i did not understand it.

my requirement

  • i want to set two alert, 1 alert on before given specific time like "5 minute, 15 minute, 30 minute, 1 hour". 2 second alert want set on event time.

  • On the base of searching how to add alarm in event i did something for add event but however it doesn't work. lot of try but no effect in calendar.

  • see below code i have tried both way as per my requirement i use switch case and even try to add single alarm. Both not work.

what should i have to do ?

give any suggestions, solution, idea

Thanks

       let event:EKEvent = EKEvent(eventStore: appleEventStore)

        event.title = tempDescription
        event.startDate = startDate as Date
        event.endDate = endDate as Date
        event.isAllDay = false
        event.notes = "This is a note"
        event.calendar = cal
        do {
            try appleEventStore.save(event, span: .thisEvent)
            print("events added with dates:")

            let alarm = EKAlarm(relativeOffset: 600)
            event.addAlarm(alarm)

            switch tempalertid {

            case "1":
                let aInterval: TimeInterval = -5 * 60
                let alaram = EKAlarm(relativeOffset: aInterval)
                event.addAlarm(alaram)
            case "2":
                let aInterval: TimeInterval = -15 * 60
                let alaram = EKAlarm(relativeOffset: aInterval)
                event.addAlarm(alaram)
            case "3":
                let aInterval: TimeInterval = -30 * 60
                let alaram = EKAlarm(relativeOffset: aInterval)
                event.addAlarm(alaram)
            case "4":
                let aInterval: TimeInterval = -1 * 60 * 60
                let alaram = EKAlarm(relativeOffset: aInterval)
                event.addAlarm(alaram)

            default:
                break
            }
            if event.hasAlarms {
                print("yes")

            }
            else {
                print("no")
            }

        } catch let e as NSError {
            print(e.description)
            return
        }
        print("Saved Event")

Solution

  • I have two thoughts:

    First, you are saving your event before you are creating your alarms.

    Secondly, the .alarm property is an Array of alarms and you are trying to save each alarm individually.

    I have a sample of code for you to take a look at, unfortunately, it's written in Objective-C.

    EKEvent *event = [EKEvent eventWithEventStore:store];
    EKAlarm *alarmForOneDayBeforeAppointment = [[EKAlarm alloc] init];
    alarmForOneDayBeforeAppointment.absoluteDate = [self modifyDate:eventDate
                                                           withUnit:NSCalendarUnitDay
                                                                     andQuantity:-1];
    event.alarms = @[alarmForOneDayBeforeAppointment];
    [store saveEvent:event span:EKSpanThisEvent error:&err];
    

    Try saving your event after you set your event.alarm as an array.