EKEvent未在日历ios中保存提醒

时间:2012-10-29 14:26:54

标签: ios ekeventkit

我正在尝试在日历中保存提醒。它被保存但日期和时间错误。

编辑基本上我想在日历中保存提醒,其中包含从startDate选取器中选择的开始日期和从endDate选取器中选择的结束日期。和提醒时间选择器中选择的时间。任何日期和时间。

以下是我的代码。我在这里做错了什么

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];

2 个答案:

答案 0 :(得分:4)

基本上我想在日历中保存提醒,其中包含从startDate选取器中选择的开始日期和从endDate选取器中选择的结束日期。和提醒时间选择器中选择的时间。任何日期和时间。

您也不需要2个或3个拣货员,所有这些操作只能使用一个拣货员。

当你使用3个选择器,一个用于开始日期,一个用于结束日期和其他用于时间,并且UI看起来也很时髦时,似乎分配花费很多。

那你为什么要使用dateWithTimeIntervalSince1970:。它返回一个NSDate对象,该对象设置为1970年1月1日GMT第一个瞬间的给定秒数。你不需要它。

以BOOL为例:BOOL dateValue

如果dateValue为true,请获取开始日期,如果为false则获取结束日期。

只需获得第一个选定日期:

NSDate *startDate = [datePicker date];

注意:选择开始日期后,将选择器的最短日期设置为您选择的第一个开始日期。

然后用户无法在开始日期之前选择结束日期。

答案 1 :(得分:0)

我弄清楚我做错了什么。下面的代码工作正常(这里为其他用户发布代码)

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];