EKEventTool
網絡上寫的方法都大同小異,我也是看着各種博客學習的,現在就是把自己做好的項目做一下記錄。
1. 保存
#import <EventKit/EventKit.h><br><br>- (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(@"保存成功"); } }); }]; }
2.查找
查找主要是兩種辦法:
1.根據日歷的時間、標題等這些屬性,查找eventstore中的日歷事件,找到相同的事件。
這種方法主要是在沒有保存數據的時候,比方從后台獲得的事件數據,根據屬性查找是否已經保存到了本地,可以很准確的查找到所查找的某一個事件。
2.根據eventIdentifier。 EKEvent的唯一標識,可以方便快捷的找到特定的事件,但是前提是要在第一次存儲的時候保存下該數據。、
兩種方法適合不同的需求,都可以使用。
1. EKEventStore * eventStore = [[EKEventStore alloc]init]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:yyyyMMddHHmm]; NSDate *startDate = [dateFormatter dateFromString:eventModel.startDateStr]; NSDate *endDate = [dateFormatter dateFromString:eventModel.endDateStr]; NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:@[[eventStore defaultCalendarForNewEvents]]]; NSArray *events = [eventStore eventsMatchingPredicate:predicate]; 2. EKEvent *event = [self.myEventStore eventWithIdentifier:identifier];
3.刪除
EKEvent *event = [self.myEventStore eventWithIdentifier:identifier]; __block BOOL isDeleted = NO; dispatch_async(dispatch_get_main_queue(), ^{ NSError *err = nil; isDeleted = [self.myEventStore removeEvent:event span:EKSpanThisEvent commit:YES error:&err]; });
附上GitHub 該單例地址 EKEventTool
/** 這個單例是在項目中用到的功能,創建日歷提醒事件到系統日歷中,主要是 添加、刪除 、和刪除所有創建的事件 功能,如果需要使用的 話,可能需要自己修改。歡迎提出修改和優化意見。大家一起學習。 */