這個(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ù)大家。