EKEventTool
网络上写的方法都大同小异,我也是看着各种博客学习的,现在就是把自己做好的项目做一下记录。
1. 保存
#import <EventKit/EventKit.h><br><br>- (void)saveEvent:(id)sender {//事件市场EKEventStore *eventStore = [[EKEventStore alloc] init];//6.0及以上通过下面方式写入事件if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]){// the selector is available, so we must be on iOS 6 or newer[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {dispatch_async(dispatch_get_main_queue(), ^{if (error){//错误细心// display error message here }else if (!granted){//被用户拒绝,不允许访问日历// display access denied error message here }else{// access granted// ***** do the important stuff here *****//事件保存到日历//创建事件EKEvent *event = [EKEvent eventWithEventStore:eventStore];event.title = @"哈哈哈,我是日历事件啊";event.location = @"我在杭州西湖区留和路";NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init];[tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];event.startDate = [[NSDate alloc]init ];event.endDate = [[NSDate alloc]init ];event.allDay = YES;//添加提醒[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -60.0f * 24]];[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -15.0f]];[event setCalendar:[eventStore defaultCalendarForNewEvents]];NSError *err;[eventStore saveEvent:event span:EKSpanThisEvent error:&err];UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Event Created"message:@"Yay!?"delegate:nilcancelButtonTitle:@"Okay"otherButtonTitles:nil];[alert show];NSLog(@"保存成功");}});}];}
2.查找
查找主要是两种办法:
1.根据日历的时间、标题等这些属性,查找eventstore中的日历事件,找到相同的事件。
这种方法主要是在没有保存数据的时候,比方从后台获得的事件数据,根据属性查找是否已经保存到了本地,可以很准确的查找到所查找的某一个事件。
2.根据eventIdentifier。 EKEvent的唯一标识,可以方便快捷的找到特定的事件,但是前提是要在第一次存储的时候保存下该数据。、
两种方法适合不同的需求,都可以使用。
1. EKEventStore * eventStore = [[EKEventStore alloc]init];NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];[dateFormatter setDateFormat:yyyyMMddHHmm];NSDate *startDate = [dateFormatter dateFromString:eventModel.startDateStr];NSDate *endDate = [dateFormatter dateFromString:eventModel.endDateStr];NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:@[[eventStore defaultCalendarForNewEvents]]];NSArray *events = [eventStore eventsMatchingPredicate:predicate]; 2.EKEvent *event = [self.myEventStore eventWithIdentifier:identifier];
3.删除
EKEvent *event = [self.myEventStore eventWithIdentifier:identifier]; __block BOOL isDeleted = NO;dispatch_async(dispatch_get_main_queue(), ^{NSError *err = nil;isDeleted = [self.myEventStore removeEvent:event span:EKSpanThisEvent commit:YES error:&err];});
附上GitHub 该单例地址 EKEventTool
/** 这个单例是在项目中用到的功能,创建日历提醒事件到系统日历中,主要是 添加、删除 、和删除所有创建的事件 功能,如果需要使用的 话,可能需要自己修改。欢迎提出修改和优化意见。大家一起学习。 */