itok's Lab

昔の開発ネタを記録として残してます

CalendarStoreを使う-1「基本:イベント取得」

とりあえず、既存のカレンダーデータへアクセスしてみましょう。

基本的には CalCalendarStore を使うところからはじまります。例えば、カレンダーの一覧を得るにはこういう感じで。

NSArray* calendars = [[CalCalendarStore defaultCalendarStore] calendars];

さて、この枠組みが CoreData ヘのラッピングフレームワークであると考えると当然ですが、NSPredicate を使うと、自由自在にイベントやタスク(ToDo)を取り出すことが出来ます。イベントの検索方法としてはいろいろあるかと思いますが、用意されているのは「期間」の指定。「期間」を指定する NSPredicate インスタンスを簡単に生成できるようになってます。

+(NSPredicate*) eventPredicateWithStartDate:(NSDate*)startDate
    endDate:(NSDate*)endDate
    calendars:(NSArray*)calendars

これらの組み合わせで、ある日 dateA から dateB までに含まれるすべてのイベントを簡単に取得できます。(これが、以前は結構大変だったんですけれどね・・・)

CalCalendarStore* store = [CalCalendarStore defaultCalendarStore];
NSArray* calendars = [store calendars];
NSPredicate* predicate = [CalCalendarStore
    eventPredicateWithStartDate:dateA
    endDate:dateB
    calendars:calendars];
NSArray* events = [store eventsWithPredicate:predicate];