【问题标题】:Is there any way to create hourly RecurrenceRule?有没有办法创建每小时 RecurrenceRule?
【发布时间】:2015-07-09 00:01:43
【问题描述】:

我有一个每 4 小时发生一次的EKEvent,我想创建一个重复事件。

不幸的是,EKRecurrenceRule 类中的可用频率是每天、每周、每月和每年。

如何设置EKRecurrenceRule 对象的每小时频率?

【问题讨论】:

  • 由于您只能每天手动创建周期性事件,我怀疑您是否可以通过编程方式实现。
  • 我阅读了 EventKit Framework Apple 的文档,但我没有发现关于每小时频率 EKRurrenceRule 的信息。
  • 因为,正如我所说,它可能没有实现。

标签: ios swift ekevent ekeventstore ekeventkit


【解决方案1】:

不幸的是,没有办法使用EKRecurrenceRule 对象来制作每小时事件,但您仍然可以编写一个方法来做同样的事情。

    func createHourlyRecurringEvent(eventTitle: String, startDate: NSDate, endDate: NSDate, endReccurenceDate: NSDate, allDay : Bool, recurrenceSecondsInterval: Double, alarms: [EKAlarm]? , travelTime: Int?) {

    var eventStartDate = startDate
    var eventEndDate = endDate

    while eventStartDate.earlierDate(endReccurenceDate) != endReccurenceDate  {
        let event = EKEvent(eventStore: self.eventStore)

        event.title = eventTitle
        event.startDate = eventStartDate
        event.endDate = eventEndDate
        event.allDay = allDay
        event.alarms = alarms
        event.calendar = eventStore.defaultCalendarForNewEvents

        if let travelTime = travelTime {
            event.setValue(travelTime, forKey: "travelTime")
        }

        do {
            try eventStore.saveEvent(event, span: .ThisEvent)
            print("Hourly event created)")
            print("start date: \(formatter.stringFromDate(event.startDate)")
            print("End date: \(formatter.stringFromDate(event.endDate))")
        } catch {
            print("Event failed to save")
        }
        eventStartDate = NSDate(timeInterval: recurrenceSecondsInterval, sinceDate: event.startDate)
        eventEndDate = NSDate(timeInterval: recurrenceSecondsInterval, sinceDate: event.endDate)
    }
}

此代码位于我的 Schedule 类中。创建时间表实例后,我可以创建一个每小时重复的事件,如下所示:

 let startDate = NSDate()
 let endDate = NSDate(timeInterval: 10800, sinceDate: startDate)
 let oneWeekInSeconds = 604800.0
 let endRecurrenceDate = NSDate(timeInterval: oneWeekInSeconds, sinceDate: NSDate())
 let fourHours = 14400.0
 schedule!.createHourlyRecurringEvent("Testing",
                                         startDate: startDate,
                                         endDate: endDate,
                                         endReccurenceDate: endRecurrenceDate,
                                         allDay: false,
                                         recurrenceSecondsInterval: fourHours,
                                         alarms: nil,
                                         travelTime: nil)

删除单个事件很简单,如下所示:

    func deleteEvent(eventToRemove: EKEvent) -> Bool {
    var successful = false
        do {
            print("deleting single event")
            try self.eventStore.removeEvent(eventToRemove, span: .ThisEvent)
            successful = true
        } catch {
            print("Bad things happened")
        }

    return successful
}

我还没有找到批量删除所有事件的好方法,因为它们都有不同的唯一 ID。当我找到一个好方法时,我会更新这篇文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多