之前对这个块也不是很熟悉,然后在一个项目上使用过,所以这里就记下笔记,仅供参考。
准备工作
1.需要在工程中引入EventKit框架,#import <EventKit/EventKit.h>
2.引入了此框架后,我们可以用来操作系统日历和提醒事项,这两个app都是IOS系统自带的功能。
3.这里有个EKEventStore,相当于一个数据库身份。因为使用比较频繁,建议创建成单例模式。
4.添加日历访问权限,IOS10之后需要往info.plist里面配置日历访问权限(NSCalendarsUsageDescription)
日历权限检测
//日历权限检测
- (void)checkCalendarAuthorizationCompletion:(void(^)(BOOL granted, NSError *error))completion
{
//EKEventStore
//检查日历授权状态
/*
EKAuthorizationStatusNotDetermined = 0, //未进行授权选择
EKAuthorizationStatusRestricted, //未授权,且用户无法更新,如家长控制情况下
EKAuthorizationStatusDenied, //用户拒绝App使用
EKAuthorizationStatusAuthorized, //已授权,可使用
*/
EKAuthorizationStatus authorizationStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
if (authorizationStatus == EKAuthorizationStatusNotDetermined || authorizationStatus == EKAuthorizationStatusDenied) {
//未进行授权选择
[[self sharedEKEventStore] requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
DLog(@"授权成功");
if (completion) {
completion(true,nil);
}
}else{
DLog(@"授权失败,error:%@",error);
if (completion) {
completion(false,error);
}
}
}];
}else if (EKAuthorizationStatusRestricted == authorizationStatus){
if (completion) {
completion(false,nil);
}
}else if (EKAuthorizationStatusAuthorized == authorizationStatus){
if (completion) {
completion(true,nil);
}
}
}
新增日历事件
//新增日历事件
- (void)addCalendarStartDate:(NSString *)startDate addEndDate:(NSString *)endDate alarms:(NSArray *)alarmArray title:(NSString *)title
{
EKEvent *event = [EKEvent eventWithEvent