日历相关EKEvent的学习记录

这篇博客主要记录了在iOS开发中使用EKEvent进行日历操作的相关学习,包括如何判断应用程序是否有权限访问日历,并参考了相关文章进行深入探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断是否可以访问日历


EKEventStore *store = [[EKEventStore alloc] init];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (granted == YES) {
            NSLog(@"同意");
        }else{
            NSLog(@"不同意");
        }
    }];

获取日历事件



// 获取适当的日期(Get the appropriate calendar)
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    // 创建起始日期组件(Create the start date components)
    NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
    oneDayAgoComponents.day = -1;
    NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                  toDate:[NSDate date]
                                                 options:0];
    
    // 创建结束日期组件(Create the end date components)
    NSDateComponents *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 *predicate = [store predicateForEventsWithStartDate:oneDayAgo
                                                            endDate:oneYearFromNow
                                                          calendars:nil];
    
    // 获取所有匹配该谓词的事件(Fetch all events that match the predicate)
    NSArray *events = [store eventsMatchingPredicate:predicate];
    for (EKEvent *e in events) {
        NSLog(@"%@",e.title);
        NSLog(@"%@",e.startDate);
        NSLog(@"%@",e.endDate);
        NSLog(@"-------------------------");
    }

添加一个日历事件



 // Get the event store object
    self.eventStore = [[EKEventStore alloc] init];
    
    // Create a new event
    EKEvent *event  = [EKEvent eventWithEventStore:self.eventStore];
    
    // Create NSDates to hold the start and end date
    NSDate *startDate = [[NSDate alloc] init];
    NSDate *endDate  = [[NSDate alloc] init];
    
    // Set properties of the new event object
    event.title     = @"这是测试";
    event.startDate =  [NSDate dateWithTimeIntervalSinceNow:-60*60];
    event.endDate   =  [NSDate dateWithTimeIntervalSinceNow:-30];
    event.allDay = NO;
    
    // set event's calendar to the default calendar
    [event setCalendar:[self.eventStore defaultCalendarForNewEvents]];
    
    // Create an NSError pointer
    NSError *err;

    // Save the event
    [self.eventStore saveEvent:event span:EKSpanThisEvent error:&err];
    
    self.idf = [NSString stringWithFormat:@"%@",event.eventIdentifier];
    NSLog(@"%@",event.eventIdentifier);
    
    // Test for errors
    if (err == noErr) {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:@"Event Created"
                              message:@"How about that?"
                              delegate:nil
                              cancelButtonTitle:@"Okay"
                              otherButtonTitles:nil];
        [alert show];  
        
    }  

删除一个日历事件


EKEvent *eventToRemove = [self.eventStore eventWithIdentifier:self.idf];
    
    if ([eventToRemove.eventIdentifier length] > 0) {
        NSError* error = nil;
        [self.eventStore removeEvent:eventToRemove span:EKSpanThisEvent error:&error];
        if (error) {
            NSLog(@"%@",error);
        }else {
            NSLog(@"ok");
        }
    }

修改一个日历事件


EKEvent *eventToRemove = [self.eventStore eventWithIdentifier:self.idf];
    eventToRemove.title = @"已经修改";
    // Save the event
    [self.eventStore saveEvent:eventToRemove span:EKSpanThisEvent error:nil];


参考文章:

http://www.16kan.com/question/detail/265397.html

http://blog.youkuaiyun.com/linqir/article/details/8588835

http://supershll.blog.163.com/blog/static/3707043620127284210222/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值