首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EKEvent没有遵循EKRecurrenceRule

EKEvent没有遵循EKRecurrenceRule
EN

Stack Overflow用户
提问于 2016-04-25 05:24:29
回答 1查看 600关注 0票数 1

我在iOS日历中使用EventKit添加一个事件。事件是反复发生的事件。我正在以编程方式设置事件的重复规则。事件正在成功地添加到日历中,但日历上显示的日期与我设置的日期不一样。

事件详细信息

循环规则.

事件成功添加到日历之后,这就是我在日历条目中得到的

我的活动将于2017年举行,但我并没有把结束日期定在2017年,而是2016年。

我尝试用iOs日历添加事件,并得到了相同的结果。

下面是我正在使用的代码。

代码语言:javascript
复制
/*!
 *  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);
    }
}

下面是我在调试器中获得的事件详细信息:

代码语言:javascript
复制
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);
};

请建议我用错了什么,或者我漏掉了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-11 07:11:37

我用这个答案找到了这个问题的解决办法。

iOS calendar is behaving strangly

我用错误的方式设置了Ends参数。它应该在启动的同一天。时间应该是不同的。

现在我的活动屏幕看起来像这样

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36832581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档