二、Calendar Events 读写
来源:互联网 发布:手游模拟器mac版 编辑:程序博客网 时间:2024/05/29 11:21
简介
EKEventStore Class可以对Calendar database进行增删查改操作。你可以根据自定义条件(predicate:中文翻译为谓词,可以理解为真真假假的函数, a predicate you provide,即你提供的条件)获取自定义事件,也可以根据唯一标识获取个人事件。获取到事件后, 你可以通过EKEvent 类获取日历信息, 也可以修改日历信息。
连接Event Store
IOS5:EKEventStore* store = [[EKEventStore alloc] init]; IOS6及以后,在初始化后需要获取权限 store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error){ ... //异步回调 }
注意:
1.EKEventStore在初始化和释放时需要时间较长, 所以不要对每个事件单独申请对象, 而做成单例即可。
2.store必须最后释放, 如果在其他Event Kit对象释放前释放, 则可能产生错误。
获取Events
目前有两种获取事件的方法。第一种是通过谓词或搜索条件来获取,只要符合条件的事件都会获取到。第二种是通过唯一标识获取,则只会获取到一个。 注意:从Calendar database获取到的事件不一定按时间进行排序,如果要排序,则需要调用排序函数
使用谓词
获取事件时,通常会指定一段时间范围,使用EKEventStore中的方法eventsMatchingPredicate:可以获取指定时间范围内的事件。
下面展示一段获取事件的代码:
// Get the appropriate calendarNSCalendar *calendar = [NSCalendar currentCalendar];// Create the start date componentsNSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];oneDayAgoComponents.day = -1;NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents toDate:[NSDate date] options:0];// Create the end date componentsNSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init];oneYearFromNowComponents.year = 1;NSDate *oneYearFromNow = [calendar dateByAddingComponents:oneYearFromNowComponents toDate:[NSDate date] options:0];// Create the predicate from the event store's instance method//NSPredicate必须通过该方法获取//参数calendars是一个calendar的集合,如果为nil,表示所有用户的calendars NSPredicate *predicate = [store predicateForEventsWithStartDate:oneDayAgo endDate:oneYearFromNow calendars:nil];// Fetch all events that match the predicate、//该方法为同步方法,最好放在工作线程里做 NSArray *events = [store eventsMatchingPredicate:predicate];//sortNSMutableArray* sortedArray = [NSMutableArray arraywithArray: [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)]];
使用唯一标识
EKEventStore eventWithIdentifier: 方法可以根据唯一标识获取事件,如果该事件为循环提醒事件, 则返回第一次发生的事件。
创建和编辑事件
Note:如果开发平台是ios,你可以用Event Kit UI framework提供的event view controllers模板进行事件的操作。
创建事件的接口,EKEvent eventWithEventStore:
事件可编辑项:
- 标题
- 开始和结束事件
- 事件关联的日历属性,如日历类型:工作、日历、家庭;被邀请人
- 事件关联的提醒属性,如提醒的时间点、显示为
- 事件规则,是否重复执行
保存和删除事件
注意:在更改Calendar database时, 一定要让用户进行确认。
事件的修改将在保存之后才生效,保存接口: EKEventStore saveEvent:span:commit:error:
删除接口: EKEventStore removeEvent:span:commit:error:
以上两个接口中的span参数, 如果指定为EKSpanFutureEvents, 则对于循环发生的事件, 将应用到未来出现的所有事件中
以上两个接口中的commit参数, 如果传NO,则必须要保证在后面的代码中调用commit从而使操作永久生效。ps:YES时会立即生效。
当删除或保存操作时,都会自动同步到该事件所属的日历(CalDAV, Exchange 等)
批处理事件操作
该方法根据predicate枚举每个事件, 可以在block中对每个事件进行操作。
[eventStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop){ NSLog(@"%@", event); //该block方法为同步方法, 应该放到工作线程中执行 dispatch_async(dispatch_get_global_queue(0, 0), ^{ //....do something }); //当stop=YES时,将跳出block }];
- 二、Calendar Events 读写
- Exchange Online管理员如何取消Calendar Events?
- Unity (二) Animator:Events
- Unity (二) Animator:Events
- Android4.0下的Calendar、events、reminder简单Demo
- EVENTS
- Events
- 【Google Calendar API v3】get events list with OAuth 2.0 & Rest
- ui-calendar(AngularJS 版本的FullCalendar)中月份变化后events消失
- Ruby on Rails操作Google Calendar(二)
- Date和Calendar类的使用方法(二)
- alter session set events相关知识(二)
- Linux电源管理_Wakeup events framework--(二)
- Node.Js events模块(二)-EventEmitter自定义操作事件
- calendar
- calendar
- Calendar
- Calendar
- Tomcat server.xml详解
- 百度地图的 LocationClient 在高德地图中要用什么来实现?
- HDU 1542 Atlantis [离散化 + 扫描线 + 线段树]
- C编译器剖析_6.3.4 汇编代码生成_为函数调用与返回产生汇编代码
- 【pintos学习笔记】(2)睡眠“忙等待”
- 二、Calendar Events 读写
- 进程间通信(二):FIFO
- 对于Thinking In Java中byte,short无符号右移的理解
- 2015年04月30日学习情况
- hdu 5210
- android 无线调试
- 曲线拟合
- 随机抽样一致算法
- 在Android中定制Switch控件