在IOS中设置与EKEvent的开始日期和结束日期有关的特定计时的警报

时间:2015-02-02 13:04:15

标签: ios objective-c ekevent

我正在进行日历活动,开始日期为2015年2月2日,结束日期为2015年2月6日,我有两个时间上午8:00和下午9:00,这些时间是从带有UIDatePickerModeTime的UIDatePicker中选择的。

根据事件的开始日期,警报/提醒将在两个时间点之后被触发。用户可以使用DatePicker按照自己的意愿更改时间。

如果我将它们添加到事件中,那么它的开始日期仅显示为

快讯,

星期一,2月2日,上午8:00

星期一,2月2日,晚上9点

但是当我转到日历并选择Feb3时,警报也显示为

快讯,

星期一,2月2日,上午8:00

星期一,2月2日,晚上9点

//而不是

快讯,

星期一,2月3日,上午8:00

星期一,2月3日,晚上9点

它会在2月2日至2月6日的上午8点和晚上9点开火吗?还有我需要根据我的要求修改以进行解雇..

这是我到目前为止尝试的代码..

event.alarms = [[NSArray alloc] initWithObjects:[EKAlarm alarmWithAbsoluteDate:pickerFirstAlarm.date],[EKAlarm alarmWithAbsoluteDate:pickerSecondAlarm.date], nil];

是否使用EKAlarm的alarmWithRelativeOffset进行上述处理..

我需要在开始和结束日期的不同闹钟时间发出提醒/闹钟......

任何想法/建议将不胜感激..

在此先感谢..!

2 个答案:

答案 0 :(得分:0)

- (void)addEventToCalendar
 {

    EKEventStore *eventStore = [[EKEventStore alloc]init];
    if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])            {
// iOS 6 and later
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,   NSError *error) {
    if (granted){

    //for IOS > 6.0
   EKEvent *event = [EKEvent eventWithEventStore:eventStore];
   [event setCalendar:[eventStore defaultCalendarForNewEvents]];

  //no need to fill all fill which one u want to set
   event.title =@"eventTitle";
   event.location = @"eventLocation";
   event.notes = @eventNote";
   event.startDate =  eventStartDate; //set date
   event.endDate = eventEndTime;
   event.URL = [NSURL URLWithString:@"url"];

  //for alert set the aleram and notify the user rest is taken care by calendar for u 

   switch (evetReminder) {   //set alaram for 5mins, 15mins ,20mins etc
    case 0:
        self.selectedAlertSetting = @"None";
        break;

    case 1:
    {
        EKAlarm *alaram = [[EKAlarm alloc]init];
        [alaram setAbsoluteDate:eventStartDate];
        [event addAlarm:alaram];
        [alaram release];
        break;
    }


    case 2:
    {
        NSTimeInterval aInterval = -5 *60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 3:
    {
        NSTimeInterval aInterval = -15 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 4:
    {
        NSTimeInterval aInterval = -30 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 5:
    {
        NSTimeInterval aInterval = -1 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 6:
    {
        NSTimeInterval aInterval = -2 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }

    case 7:
    {
        NSTimeInterval aInterval = -1 * 24 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 8:
    {
        NSTimeInterval aInterval = -2 * 24 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    default:
        break;
}

  //finally add it to calendar
  NSError *err = nil;
  BOOL complete = [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
  if(err)
 {
    NSLog(@"error in storing event");
 }
 else
    NSLog(@"successfully added");

 if(complete)
 {
     NSLog(@"successfully added");
 }
 else
 {
    NSLog(@"error in storing event");
 }

 [eventStore release];

 }

 }];

 }
  else
 {
    //for IOS < 6.0
   // perform  same action hear
   EKEvent *event = [EKEvent eventWithEventStore:eventStore];
   [event setCalendar:[eventStore defaultCalendarForNewEvents]];

  //no need to fill all fill which one u want to set
   event.title =@"eventTitle";
   event.location = @"eventLocation";
   event.notes = @eventNote";
   event.startDate =  eventStartDate; //set date
   event.endDate = eventEndTime;
   event.URL = [NSURL URLWithString:@"url"];

  //for alert set the aleram and notify the user rest is taken care by calendar for u 

   switch (evetReminder) {   //set alaram for 5mins, 15mins ,20mins etc
    case 0:
        self.selectedAlertSetting = @"None";
        break;

    case 1:
    {
        EKAlarm *alaram = [[EKAlarm alloc]init];
        [alaram setAbsoluteDate:eventStartDate];
        [event addAlarm:alaram];
        [alaram release];
        break;
    }


    case 2:
    {
        NSTimeInterval aInterval = -5 *60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 3:
    {
        NSTimeInterval aInterval = -15 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 4:
    {
        NSTimeInterval aInterval = -30 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 5:
    {
        NSTimeInterval aInterval = -1 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 6:
    {
        NSTimeInterval aInterval = -2 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }

    case 7:
    {
        NSTimeInterval aInterval = -1 * 24 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    case 8:
    {
        NSTimeInterval aInterval = -2 * 24 * 60 * 60;
        EKAlarm *alaram = [EKAlarm alarmWithRelativeOffset:aInterval];
        [event addAlarm:alaram];
        break;
    }
    default:
        break;
  }

  //finally add it to calendar
  NSError *err = nil;
  BOOL complete = [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
  if(err)
 {
    NSLog(@"error in storing event");
 }
 else
    NSLog(@"successfully added");

 if(complete)
 {
     NSLog(@"successfully added");
 }
 else
 {
    NSLog(@"error in storing event");
 }



[eventStore release];
  }

 }

答案 1 :(得分:0)

是的,我们可以为一个事件添加多个警报。根据你知道如何添加事件我将在此处仅为警报提供代码。我有快速的代码:

if startingDate.isLaterThan(NSDate()) {

    let alarm1 = EKAlarm(absoluteDate: startingDate)
    let alarm2 = EKAlarm(absoluteDate: endingDate)

    event.alarms = [alarm1,alarm2]

} else if endingDate.isLaterThan(NSDate()) {
     event.addAlarm(EKAlarm(absoluteDate: endingDate))
}

在此代码中,我需要在开始和结束时发出两个警报,因此我添加了两个警报,但您可以在需要的时间添加多个警报。并且比较时间大于当前时间。对于日期和时间操作,我使用了日期工具。 https://github.com/MatthewYork/DateTools。您可以根据需要轻松将其转换为Objective C.