4

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")
hardik
  • 199
  • 1
  • 6
  • 21

2 Answers2

10
    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


    switch tempalertid {
        case "1":
            let aInterval: TimeInterval = -5 * 60
            let alaram = EKAlarm(relativeOffset: aInterval)
             event.alarms = [alaram]
        case "2":
            let aInterval: TimeInterval = -15 * 60
            let alaram = EKAlarm(relativeOffset: aInterval)
             event.alarms = [alaram]
        case "3":
            let aInterval: TimeInterval = -30 * 60
            let alaram = EKAlarm(relativeOffset: aInterval)
             event.alarms = [alaram]
        case "4":
            let aInterval: TimeInterval = -1 * 60 * 60
            let alaram = EKAlarm(relativeOffset: aInterval)
            event.alarms = [alaram]

        default:
            break
        }

    do {
        try appleEventStore.save(event, span: .thisEvent)
        print("events added with dates:")

    } catch let e as NSError {
        print(e.description)
        return
    }
    print("Saved Event")
Ankit Kushwah
  • 539
  • 4
  • 16
2

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.

Patrick
  • 66
  • 1
  • 6
  • do you know help me to add custom frequency on event like i want to add weekly frequency, in which user can select multiple day like user can add event on every Monday and Friday or it can be all day or only one specific day like Saturday. i having array of selected day. – hardik May 22 '17 at 09:32
  • open my new question link : http://stackoverflow.com/q/44111168/6638267 – hardik May 22 '17 at 11:04