同步系统日历以及系统日历的日程

如果要同步应用的日程到系统日历,则需要首先添加应用权限设置。如上所示:
 

2.添加框架:#import <EventKit/EventKit.h>

/** 同步到系统日历  */

-(void)aiChatSynchronizeToSystemCalendar{

    

    // 创建一个EventKit事件存储对象

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    // 请求日历访问权限

    if (@available(iOS 17.0,*)) {

        [eventStore requestWriteOnlyAccessToEventsWithCompletion:^(BOOL granted, NSError * _Nullable error) {

            if (granted) {

                // 如果用户授权了访问权限,则继续添加事件到系统日历中

                EKEvent *event = [EKEvent eventWithEventStore:eventStore];

                event.title = self.model.answer;

    //            event.startDate = [NSDate date]; // 设置开始时间

                if ([self.model.target_date containsString:@"00:00:00"]) {

                    event.startDate = [TSConvertObject getDateOfTargetTime:self.model.target_date timeStyle:@"yyyy-MM-dd HH:mm:ss"];// 设置开始时间

                }

                else{

                    event.startDate = [TSConvertObject getDateOfTargetTime:self.model.target_date timeStyle:@"yyyy-MM-dd"];// 设置开始时间

                }

                event.endDate = [NSDate dateWithTimeInterval:60*60*24-1 sinceDate:event.startDate]; // 设置结束时间

                event.calendar = [eventStore defaultCalendarForNewEvents]; // 获取系统默认日历

                

                NSError *saveError = nil;

                [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&saveError];

                

//                if (saveError) {

//                    NSLog(@"同步到系统日历失败了:Error saving event: %@", saveError);

//                } else {

//                    NSLog(@"同步到系统日历成功了:Event saved successfully");

//                }

                

            } else {

                // 如果用户拒绝了访问权限,则显示相应的提示或者处理逻辑

//                NSLog(@"用户拒绝同步到系统日历:Access to calendar was denied");

            }

        }];

    }

    else{

        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            if (granted) {

                // 如果用户授权了访问权限,则继续添加事件到系统日历中

                EKEvent *event = [EKEvent eventWithEventStore:eventStore];

                event.title = self.model.answer;

    //            event.startDate = [NSDate date]; // 设置开始时间

                if ([self.model.target_date containsString:@"00:00:00"]) {

                    event.startDate = [TSConvertObject getDateOfTargetTime:self.model.target_date timeStyle:@"yyyy-MM-dd HH:mm:ss"];// 设置开始时间

                }

                else{

                    event.startDate = [TSConvertObject getDateOfTargetTime:self.model.target_date timeStyle:@"yyyy-MM-dd"];// 设置开始时间

                }

                event.endDate = [NSDate dateWithTimeInterval:60*60*24-1 sinceDate:event.startDate]; // 设置结束时间

                event.calendar = [eventStore defaultCalendarForNewEvents]; // 获取系统默认日历

                

                NSError *saveError = nil;

                [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&saveError];

                

              

            } else {

                // 如果用户拒绝了访问权限,则显示相应的提示或者处理逻辑

//                NSLog(@"用户拒绝同步到系统日历:Access to calendar was denied");

            }

        }];

    }

}

3.如果想要在删除应用的日程以后,删除系统日历上的相关日程的话,可以如下面所示那样:
 

/** 同步到系统日历  */

-(void)aiChatSynchronizeToSystemCalendar{

    // 创建一个 EventKit 事件存储对象

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    NSDate *startDate,*endDate;

    if ([self.model.startTime containsString:@"00:00"]) {

       startDate = [TSConvertObject getDateOfTargetTime:self.model.startTime timeStyle:@"yyyy-MM-dd HH:mm"];// 设置开始时间

        endDate = [NSDate dateWithTimeInterval:60*60*24-1 sinceDate:startDate];

    }

    else{

        startDate = [TSConvertObject getDateOfTargetTime:self.model.startTime timeStyle:@"yyyy-MM-dd"];// 设置开始时间

        endDate = [NSDate dateWithTimeInterval:60*60*24-1 sinceDate:startDate];

    }

  

    // 创建谓词,以过滤日程

    NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:nil];

    NSArray<EKEvent *> *events = [eventStore eventsMatchingPredicate:predicate];

    for (EKEvent *event in events) {

        if ([event.title isEqualToString:self.model.title]) {

            // 找到了与标识符匹配的日程,删除它

            NSError *deleteError = nil;

            [eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:&deleteError];

//            if (deleteError) {

//                NSLog(@"删除系统日程失败:Error deleting event: %@", deleteError);

//            }

//            else {

//                NSLog(@"删除系统日程成功:Event deleted successfully");

//            }

        }

    }

}

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值