2016-04-25 132 views
1

我正在使用EventKit在iOS日曆中添加事件。該事件是經常性事件。我正在以編程方式爲事件設置重複規則。事件已成功添加到日曆中,但日曆中顯示的日期與我設置的日期不同。EKEvent不遵循EKRecurrenceRule

活動詳情 enter image description here

經常性的規則。 enter image description here

添加成功後,事件日曆,這是我在日曆條目 enter image description here

我的事件被顯示爲2017年,但我並沒有設定結束日期至2017年是2016弄。

我試着用iOs日曆添加事件並得到了相同的結果。

以下是我正在使用的代碼。

/*! 
* This method, called added event to the calendar 
*/ 
- (void)addEventToCalendar 
{ 
    @try { 


     /* Event added to device calendar */ 
     [SINGLETON.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
      if (granted) { 

       [SINGLETON.event_Dateformat setDateFormat:[self dateFormatForSelectedLanguage]]; 
       EKEvent *event = [EKEvent eventWithEventStore:SINGLETON.eventStore]; 
       event.title = _event.eventTitle; 
       event.startDate = [SINGLETON.event_Dateformat dateFromString:eventInfo.eventActualStartDate]; 
       event.endDate = [SINGLETON.event_Dateformat dateFromString:eventInfo.eventActualEndDate]; 
       event.notes = flattenHTML(eventInfo.eventDescription); 

       // Get notification 2 hours before the event start time. 
       [event addAlarm:[EKAlarm alarmWithRelativeOffset:-(2*60*60)]]; 
       [event setCalendar:[SINGLETON.eventStore defaultCalendarForNewEvents]]; 

       /* Here opening Event edit view controller */ 
       EKEventEditViewController *controller = [[EKEventEditViewController alloc] init]; 
       controller.event = event; 
       controller.eventStore = SINGLETON.eventStore; 
       controller.editViewDelegate = self; 

       // Event is recurring mark it is repeat in calendar. 

       // List of days on which a particular event occurs. 
       NSMutableArray <EKRecurrenceDayOfWeek *> *daysOfTheWeek = [[NSMutableArray alloc] init]; 

       if (_event.eventRecurrence && 
        ! [_event.eventDays containsString:@"N/A"]) { 
        for (NSString *dayName in [_event.eventDays componentsSeparatedByString:@","]) { 
         EKRecurrenceDayOfWeek *aDay = [EKRecurrenceDayOfWeek dayOfWeek:[self weekDayForDayName:dayName]]; 
         [daysOfTheWeek addObject:aDay]; 
        } 
       } 

       // When to stop reminding user for the event. 
       EKRecurrenceEnd *endDate = [EKRecurrenceEnd recurrenceEndWithEndDate:event.endDate]; 

       EKRecurrenceRule *repeatRule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:[self recurrenceFrequencey:_event.eventType] interval:1 daysOfTheWeek:daysOfTheWeek daysOfTheMonth:nil monthsOfTheYear:nil weeksOfTheYear:nil daysOfTheYear:nil setPositions:nil end:endDate]; 

       event.allDay = NO; 

       event.recurrenceRules = @[repeatRule]; 

       //[event addRecurrenceRule:repeatRule]; 

       dispatch_async(dispatch_get_main_queue(), ^{ 

        //NSError *erroOnSave = nil; 
        // [SINGLETON.eventStore saveEvent:event span:EKSpanFutureEvents commit:YES error:&erroOnSave]; 
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
        [self presentViewController:controller animated:YES completion:nil]; 
       }); 

      }else{ 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 

       [SINGLETON alertViewTitle:@"" 
            message:NSLocalizedString(@"Calendar setting alert", nil) 
           cancelTitle:NSLocalizedString(@"OK", nil) 
           doneTitle:nil 
             tag:0]; 
        }); 

      } 
     }]; 

    } 
    @catch (NSException *exception) { 
     DLog(@"%@",exception); 
    } 
} 

下面是事件的細節我在調試器中得到:

EKEvent <0x7f94b1f19d00> 
{ 
    EKEvent <0x7f94b1f19d00> 
{ title =  TBW ; 
    location =  ; 
    calendar =  EKCalendar <0x7f94b439d280> {title = Calendar; type = Local; allowsModify = YES; color = #1BADF8;}; 
    alarms =  (
    "EKAlarm <0x7f94b4352fe0> {triggerInterval = -7200.000000}" 
); 
    URL =   (null); 
    lastModified = 2016-04-25 05:18:27 +0000; 
    startTimeZone = Asia/Kolkata (GMT+5:30) offset 19800; 
    startTimeZone = Asia/Kolkata (GMT+5:30) offset 19800 
}; 
    location =  ; 
    structuredLocation = (null); 
    startDate = 2015-09-20 18:30:00 +0000; 
    endDate =  2016-05-31 18:30:00 +0000; 
    allDay =  0; 
    floating =  0; 
    recurrence = EKRecurrenceRule <0x7f94b43e7110> RRULE FREQ=WEEKLY;INTERVAL=1;UNTIL=20160531T183000Z;BYDAY=MO,TH; 
    attendees = (null); 
    travelTime = (null); 
    startLocation = (null); 
}; 

請建議什麼,我用錯了或者我失去了一些東西。

回答

2

我發現這個問題的一個解決方案這個答案

iOS calendar is behaving strangly

我設置了結束在錯誤的方式參數的幫助。它應該與開始。時間應該不同。

現在我的事件屏幕看起來像這樣

enter image description here

希望這將節省別人的某天

時間