大神笔记-学习

iOS 日历提醒 (类似天猫淘宝的 利用代码添加事件到系统日历中

2017-11-03  本文已影响9人  温柔vs先生

这个文章是从我的博客转过来的,这里是博客地址http://www.cnblogs.com/wubangbang/p/6362972.html

以下是文章内容

最近项目要用到类似天猫淘宝的日历提醒,网上查找资料看到这样的一个博客http://www.cnblogs.com/xiaobaichangan/p/5160025.html

- (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(@"保存成功");
                    
                }
            });
        }];
    }
    else
    {
        // this code runs in iOS 4 or iOS 5
        // ***** do the important stuff here *****
        
        //4.0和5.0通过下述方式添加
        
        //保存日历
        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(@"保存成功");
        
    }
}

写的比较清晰明了,但是在开发过程中,发现如果有多个日历提醒,在取消或者删除这个提醒时怎么区别这个日历事件有一个这样的方法

- (nullable EKEvent *)eventWithIdentifier:(NSString *)identifier;

但是这里需要获取一个identifier 那么问题来了这个identifier到底要怎么获取呢、又是在哪里获取的呢?
然后我发现 在我们添加事件到日历时会

 [self.store saveEvent:event span:EKSpanThisEvent error:&err];

会产生一个event.eventIdentifier ,蛋疼的是当你打印输出这个identifier时你会发现,他是随机生成的一个字符串,那么我们该如何来保存这个字符串呢,我想到的是两种方法:

1、因为字符串是在添加日历时间成功以后,所以此时我们掉一下后台的接口,让后台帮我们存储这个字段,当我们删除的时候再次掉接口让他们返给我们;
2、这中方法没有实施,感兴趣的同学可以试一下,就是把这个字符串保存到本地数据库,当然是要以字典的形式保存,为了删除时找到对应的日历事件。

目前我的项目中用的就是第一种方法,已经完美解决问题,不明白的同学可以回复一下,我会尽量一一回复大家。

上一篇 下一篇

猜你喜欢

热点阅读