[英]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.