ios - 设置事件 "repeats every month"的重复发生而不是 "repeats every month, each 31st"ios

标签 ios swift events ekevent ekrecurrencerule

  1. 我将一个事件设置为某个月的 13 号,并每月重复一次。每个月都会正确地重复它。 但是,当将其设置为某个月的 31 日时,它只会设置为 31 日的月份,并且如果它显示在“编辑”->“重复”->“每月重复”中,每个月的 31 日。
  2. 如果该月没有可用的 31 日日期,我希望至少将其设置为该月的最后一天。
  3. 此外,对于 2 月 29 日、30 日或 31 日,也不会创建具有这些日期的其他月份的事件。

请注意,我们希望设置连续的事件集,以便轻松删除和编辑它们。

我编写了以下代码:

let eventstore : EKEventStore = EKEventStore()
        eventstore.requestAccess(to: EKEntityType.event, completion: { (isallow, error) -> Void in
            var event:EKEvent!

            if (event == nil) {
                event = EKEvent(eventStore: eventstore)
                event.title = self.getReminderTitleForCalendarEvent(dtDate: date)
                event.notes = ""
                event.startDate = date
                event.endDate = date
                event.calendar = eventstore.defaultCalendarForNewEvents
                let ekrules: EKRecurrenceRule = EKRecurrenceRule.init(recurrenceWith: EKRecurrenceFrequency.monthly, interval:self.selectedFrequency!, end: nil)
                event.recurrenceRules = [ekrules]
            }
            else // if there is already a event then update date
            {

                // if event is deleted by user
                event.startDate = date
                event.endDate = date
                if let oldalarm = event.alarms?[0]// remove old date alarm
                {
                    event.removeAlarm(oldalarm)
                }
                // Below code is to remove existing event
                do
                {
                    try  eventstore.remove(event, span: .thisEvent)
                    //self.objselectedinfusion.strEventId = event.eventIdentifier
                }
                catch let error as NSError {
                    //print(error.localizedDescription)
                }
            }
            let alarm = EKAlarm(relativeOffset: self.getTimeIntervalForAlert())

   let alarm = EKAlarm(absoluteDate: reminderFireDate as Date)
  event.addAlarm(alarm)

            do
            {
                try eventstore.save(event, span: EKSpan.futureEvents, commit: true)
                UserDefaults.standard.set(event.eventIdentifier, forKey: Constant.calendarEventID)
            }
            catch let error as NSError {
                //print(error.localizedDescription)
            }

        })

这里selectedFrequency是重复间隔,是一些月数。

最佳答案

 class  func getRepeatValue (_ option : String) -> EKRecurrenceRule?{

    // ["Daily" , "Weekly" , "Monthly" ,"Yearly","None"]

    //        "daily" , "weekly" , "monthly" ,"yearly","none"

    switch option {
    case "Daily":


        let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.daily, interval: 1, end: nil)

        //daily for 50 years
        return rule
    case "Weekly":

        //on the same week day for 50 years
        let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.weekly, interval: 1, end: nil)


        return rule
    case "Monthly":

        //on the same date of every month
        let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.monthly, interval: 1, end: nil)


        return rule

    case "Yearly":

        //on the same date and month of the year
        let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.yearly, interval: 1, end: nil)


        return rule
    case "None":
        return nil
    default:
        return nil
    }
}

关于ios - 设置事件 "repeats every month"的重复发生而不是 "repeats every month, each 31st"ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44625884/

相关文章:

ios - 在 ios 中处理自定义键盘类型

swift - 如何使用通用 NSFetchedResultsController 进行初始化?

objective-c - 更改CAMetalLayer背景颜色

iPhone:如何知道 UISlider 是否在滑动?

ios - 如何在Moya中传递URLRequest

iPhone 自动化 : Setting order of tests in OCUnit or FoneMonkey

android - 打开时更改 Spinner 内容

C#::何时使用事件或从事件处理接口(interface)派生的对象集合?

iphone - 当用户拔下耳机时是否有通知?

ios - 为什么我的标签显示 "Your cat is Optional(35) years old"而它应该显示“你的猫是 35 岁?