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:nil cancelButtonTitle:@"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
/** 这个单例是在项目中用到的功能,创建日历提醒事件到系统日历中,主要是 添加、删除 、和删除所有创建的事件 功能,如果需要使用的 话,可能需要自己修改。欢迎提出修改和优化意见。大家一起学习。 */