Calendars and Reminders

Event Kit architecture


SimpleEKDemo is an example sample code project that utilizes events in Event Kit.


不论是 Events 还是remainder 都是存储在 calendar database中,统一用类EKEventStore检索,

EKEventStore *store = [[EKEventStore alloc] init];


ios6中,加入权限:因此要用来判断是否有权限访问EKEntityTypeEvent ,EKEntityTypeReminder,


[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {


    // handle access here


}];


Fetching events with a predicate

// 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];

Retrieving Reminders

You can call fetchRemindersMatchingPredicate:completion: to access multiple reminders that match a predicate. Pass a predicate returned by one of the following methods:

NSPredicate *predicate = [store predicateForRemindersInCalendars:nil];
 
[store fetchRemindersMatchingPredicate:predicate completion:^(NSArray *reminders) {
    for (EKReminder *reminder in reminders) {
        // do something for each reminder
    }
}];

 calendarItemWithIdentifier: can fetch any calendar item (reminders and events), whereas eventWithIdentifier: fetches only events.


Observing External Changes to the Calendar Database

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(storeChanged:)
                                             name:EKEventStoreChangedNotification
                                           object:eventStore];

The Event Kit UI framework provides two types of view controllers for manipulating events:

EKEventViewController *eventViewController = [[EKEventViewController alloc] init];
eventViewController.event = myEvent;
eventViewController.allowsEditing = YES;
navigationController = [[UINavigationController alloc] initWithRootViewController:eventViewController];

EKEventEditViewController* controller = [[EKEventEditViewController alloc] init];
controller.eventStore = myEventStore;
controller.editViewDelegate = self;
[self presentModalViewController:controller animated:YES];

- (void)eventEditViewController:(EKEventEditViewController *)controller 

didCompleteWithAction:(EKEventEditViewAction)action {

NSError *error = nil;

EKEvent *thisEvent = controller.event;

switch (action) {

case EKEventEditViewActionCanceled:

// Edit action canceled, do nothing.

break;

case EKEventEditViewActionSaved:

// When user hit "Done" button, save the newly created event to the event store, 

// and reload table view.

// If the new event is being added to the default calendar, then update its 

// eventsList.

if (self.defaultCalendar ==  thisEvent.calendar) {

[self.eventsList addObject:thisEvent];

}

[controller.eventStore saveEvent:controller.event span:EKSpanThisEvent error:&error];

[self.tableView reloadData];

break;

case EKEventEditViewActionDeleted:

// When deleting an event, remove the event from the event store, 

// and reload table view.

// If deleting an event from the currenly default calendar, then update its 

// eventsList.

if (self.defaultCalendar ==  thisEvent.calendar) {

[self.eventsList removeObject:thisEvent];

}

[controller.eventStore removeEvent:thisEvent span:EKSpanThisEvent error:&error];

[self.tableView reloadData];

break;

default:

break;

}

// Dismiss the modal view controller

[controller dismissModalViewControllerAnimated:YES];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值