2017-06-19 107 views
0
  1. 我設置一個事件,說一個月的13日,並重復它每個月。它每個月都會重複一遍。 但是,如果將其設置爲某個月的第31個月,它將僅在第31個月中設置爲幾個月,並且在每個第31個月每個月重複編輯 - >重複 - >重複。
  2. 我希望它至少設置爲最後一天的月份,如果沒有日期的第31個月可用。
  3. 同樣在2月份的29,30或31月份,也不會創建這些日期的其他月份的事件。

請注意,我們想要設置連續的事件集,以便刪除和編輯它們很容易。設置事件重複「重複每月」而不是「重複每個月,每個第31」ios

我寫了下面的代碼:

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復發間隔時間是幾個月的一些數字。

回答

0
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 
    } 
} 
+1

SO更喜歡解釋代碼的答案。你能解釋這是如何工作的,爲什麼這個代碼解決了OP的問題? – toonarmycaptain

+0

請閱讀 - 上述答案並不完整 - 您必須創建複雜的重複規則。 https://developer.apple.com/documentation/eventkit/ekrecurrencerule/1507320-init –