カレンダーに登録してあるイベントの取得に関するメモ

(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]);

    }

    

}