简体   繁体   English

如何在iOS日历的EKEvent中设置特定警报?

[英]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. 在EKEvent中,一旦我没有为事件设置任何警报,便会签入日历应用程序,它会在5分钟前向我显示警报。 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". 我想在给定的特定时间(例如“ 5分钟,15分钟,30分钟,1小时”)之前设置两个警报, 1个警报。 2 second alert want set on event time. 希望在事件时间设置2秒警报。

  • 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")
    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")

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. 其次,.alarm属性是一个警报数组,您尝试单独保存每个警报。

I have a sample of code for you to take a look at, unfortunately, it's written in Objective-C. 不幸的是,我有一个示例代码供您查看,它是用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. 将event.alarm设置为数组后,尝试保存事件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM