简体   繁体   English

EKEvent未在日历iOS中保存提醒

[英]EKEvent is not saving reminder in calendar ios

I am trying to save reminder in calendar. 我正在尝试在日历中保存提醒。 Its been saved but with wrong date and time. 它已保存,但日期和时间错误。

EDIT Basically i want to save reminder in calendar with start date selected from startDate picker and end date selected from endDate picker. 编辑基本上,我想用从startDate选择器中选择开始日期和从endDate选择器中选择结束日期的日历中保存提醒。 and time selected from reminderTime picker. 和从提醒时间选择器中选择的时间。 Any date and time. 任何日期和时间。

Below is my code. 下面是我的代码。 What i am doing wrong here 我在这里做错了

EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
event.title = productTextField.text;

   [event setCalendar:[eventStore defaultCalendarForNewEvents]];

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];//This is working

NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[reminderTime getDate]];

NSInteger hour = [components hour];
NSInteger minute = [components minute];
NSDate *reminderDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[startDate getDate] timeIntervalSince1970] + (minute * 60) + (hour * 60 * 60)];
 NSDate *endDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[endDate getDate] timeIntervalSince1970] ];
 event.startDate = reminderDateAndTime;

event.endDate   = endDateAndTime;

    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

Basically i want to save reminder in calendar with start date selected from startDate picker and end date selected from endDate picker. 基本上,我想使用从startDate选择器中选择开始日期和从endDate选择器中选择结束日期来在日历中保存提醒。 and time selected from reminderTime picker. 和从提醒时间选择器中选择的时间。 Any date and time. 任何日期和时间。

You don't need 2 or 3 pickers as well, you can use only one picker for all this operation. 您也不需要2或3个选择器,所有操作只能使用一个选择器。

Seems like allocation is taking much when you use 3 pickers, one for start date, one for end date and other for time and that UI looks funky as well. 当您使用3个选择器,其中一个用于开始日期,一个用于结束日期,而另一个用于时间时,分配似乎花费很多,并且UI看起来也很时髦。

Then why are you using dateWithTimeIntervalSince1970: . 然后,为什么要使用dateWithTimeIntervalSince1970: It returns an NSDate object set to the given number of seconds from the first instant of 1 January 1970, GMT. 从GMT 1970年1月1日的第一个瞬间起,它返回一个NSDate对象,该对象设置为给定的秒数。 You don't need it. 不用了

Just take a BOOL for example: BOOL dateValue BOOL dateValue BOOL为例: BOOL dateValue

if dateValue is true, get your start Date and if it is false get your end date. 如果dateValue为true,则获取开始日期,如果为false,则获取结束日期。

Just get the first selected date like: 只需获得第一个选定的日期,例如:

NSDate *startDate = [datePicker date];

Note: After selecting the start Date, set the minimum Date of your picker as your first selected start date. 注意:选择开始日期后,将选择器的最小日期设置为第一个选择的开始日期。

Then user can't select the end Date before the start Date. 这样,用户将无法选择开始日期之前的结束日期。

I figured out what i was doing wrong. 我发现自己在做什么错。 Below code works fine (posting code here for other users) 下面的代码工作正常(在此处为其他用户发布代码)

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];


// Break the date up into components
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:[startDate getDate]];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                               fromDate:[reminderTime getDate]];

NSDateComponents *dateComponentsEnd = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:[endDate getDate]];

 [event setCalendar:[eventStore defaultCalendarForNewEvents]];

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];
// Notification will fire in one minute
[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *startDatee = [calendar dateFromComponents:dateComps];
NSDateComponents *dateCompsEnd = [[NSDateComponents alloc] init];
[dateCompsEnd setDay:[dateComponentsEnd day]];
[dateCompsEnd setMonth:[dateComponentsEnd month]];
[dateCompsEnd setYear:[dateComponentsEnd year]];
NSDate *endDatee = [calendar dateFromComponents:dateCompsEnd];
event.startDate=startDatee;
event.endDate=endDatee;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM