カレンダーに登録してあるイベントの取得に関するメモ
(iOS 5で試しています)
ポイント
・カレンダーの特定
・検索条件 NSPredicateの作成
その他
全イベントを取得したかったので、検索条件の from に
int year = 365 * 24 * 60 * 60;
NSDate *from = [NSDate dateWithTimeIntervalSince1970: 42 * year];
を指定。
インポート
・EventKitを利用するので、Link Binary With Librariesに追加
・実装するソースの頭に、#import <EventKit/EventKit.h>を追加
Think という名前のカレンダーから2012年以降のイベントを全部取得する
サンプルコード
– (void)viewDidLoad
{
[super viewDidLoad];
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKCalendar *thinkCalendar;
// カレンダーを指定する
NSString *calendarTitle = @”Think”;
for (EKCalendar *cal in eventStore.calendars) {
if ([cal.title isEqual:calendarTitle]) {
thinkCalendar = cal;
}
}
// 検索条件 NSPredicate を作る
// from 2012 ( 1970 + 42 )
int year = 365 * 24 * 60 * 60;
NSDate *from = [NSDate dateWithTimeIntervalSince1970: 42 * year];
NSPredicate *search = [eventStore predicateForEventsWithStartDate:from endDate:[NSDate date] calendars:[NSArray arrayWithObject:thinkCalendar]];
// 検索
NSArray *events = [eventStore eventsMatchingPredicate:search];
// ログに出してみる
for(EKEvent *event in events) {
NSLog(@”title :%@”, event.title);
NSLog(@”start :%@”, [event.startDate description]);
}
}