iOS 日歷提醒 (類似天貓?zhí)詫毜?利用代碼添加事件到系統(tǒng)日歷中)

這個(gè)文章是從我的博客轉(zhuǎn)過來的,這里是博客地址http://www.cnblogs.com/wubangbang/p/6362972.html

以下是文章內(nèi)容

最近項(xiàng)目要用到類似天貓?zhí)詫毜娜諝v提醒,網(wǎng)上查找資料看到這樣的一個(gè)博客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)
                {
                    //錯(cuò)誤細(xì)心
                    // display error message here
                }
                else if (!granted)
                {
                    //被用戶拒絕,不允許訪問日歷
                    // display access denied error message here
                }
                else
                {
                    // access granted
                    // ***** do the important stuff here *****
                    
                    //事件保存到日歷
                    
                    
                    //創(chuàng)建事件
                    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
                    event.title     = @"哈哈哈,我是日歷事件啊";
                    event.location = @"我在杭州西湖區(qū)留和路";
                    
                    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 = @"我在杭州西湖區(qū)留和路";
        
        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(@"保存成功");
        
    }
}

寫的比較清晰明了,但是在開發(fā)過程中,發(fā)現(xiàn)如果有多個(gè)日歷提醒,在取消或者刪除這個(gè)提醒時(shí)怎么區(qū)別這個(gè)日歷事件有一個(gè)這樣的方法

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

但是這里需要獲取一個(gè)identifier 那么問題來了這個(gè)identifier到底要怎么獲取呢、又是在哪里獲取的呢?
然后我發(fā)現(xiàn) 在我們添加事件到日歷時(shí)會(huì)

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

會(huì)產(chǎn)生一個(gè)event.eventIdentifier ,蛋疼的是當(dāng)你打印輸出這個(gè)identifier時(shí)你會(huì)發(fā)現(xiàn),他是隨機(jī)生成的一個(gè)字符串,那么我們?cè)撊绾蝸肀4孢@個(gè)字符串呢,我想到的是兩種方法:

1、因?yàn)樽址窃谔砑尤諝v時(shí)間成功以后,所以此時(shí)我們掉一下后臺(tái)的接口,讓后臺(tái)幫我們存儲(chǔ)這個(gè)字段,當(dāng)我們刪除的時(shí)候再次掉接口讓他們返給我們;
2、這中方法沒有實(shí)施,感興趣的同學(xué)可以試一下,就是把這個(gè)字符串保存到本地?cái)?shù)據(jù)庫,當(dāng)然是要以字典的形式保存,為了刪除時(shí)找到對(duì)應(yīng)的日歷事件。

目前我的項(xiàng)目中用的就是第一種方法,已經(jīng)完美解決問題,不明白的同學(xué)可以回復(fù)一下,我會(huì)盡量一一回復(fù)大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容