2017-06-19 14 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

これを読んでください - 上記のansは完全ではありません - あなたは複雑な反復ルールを作成しなければなりません。 https://developer.apple.com/documentation/eventkit/ekrecurrencerule/1507320-init –

関連する問題