iOSのEventKitでiPhoneのカレンダー情報を読み取る方法

公開日: : 最終更新日:2012/12/19 iOSアプリ開発

   

こんにちは。アキオ(@akio0911)です。

先日はカレンダー・リマインダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法を解説しましたが、今回はiPhoneのカレンダー情報を読み取る方法を解説したいと思います。

関連 : カレンダー・リマインダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法

スポンサード リンク

EKEventStoreオブジェクトを生成する

iOSのカレンダー情報にアクセスするには、EKEventStoreクラスのオブジェクトを使います。

以下はEKEventStoreのオブジェクトを生成するコード例です。

_eventStore = [[EKEventStore alloc] init];

    

カレンダー情報へのアクセスに対する許可状況を確認する

    

カレンダー情報にアクセスする前に、authorizationStatusForEntityType:メソッドを使って、カレンダー情報へのアクセスの許可状況を確認する必要があります。

詳しくはカレンダー・リマインダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法をチェックしてみて下さい。

    

カレンダーの配列を取得する

    

calendarsForEntityType:メソッドを呼び出して、カレンダーの配列を取得します。

以下はそのコード例です。

NSArray *eventCalendars = [_eventStore calendarsForEntityType:EKEntityTypeEvent];

    

イベント情報を検索する為のNSPredicateオブジェクトを作成する

predicateForEventsWithStartDate:endDate:calendars:メソッドを使って、イベント情報を検索する為のNSPredicateオブジェクトを作成します。

以下は、1日前から1年後までのイベント情報を検索するNSPredicateオブジェクトを作成するコードです。

    

    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
    oneDayAgoComponents.day = -1;
    NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                  toDate:[NSDate date]
                                                 options:0];
    
    NSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init];
    oneYearFromNowComponents.year = 1;
    NSDate *oneYearFromNow = [calendar dateByAddingComponents:oneYearFromNowComponents
                                                       toDate:[NSDate date]
                                                      options:0];
    
    NSPredicate *predicate;
    predicate = [_eventStore predicateForEventsWithStartDate:oneDayAgo
                                                     endDate:oneYearFromNow
                                                   calendars:eventCalendars];

    

イベント情報を検索する

作成したNSPredicateオブジェクトをeventsMatchingPredicate:メソッドに渡して、イベント情報を検索します。

以下は、検索したイベント情報をNSLogで出力するコード例です。

    

    NSArray *events = [_eventStore eventsMatchingPredicate:predicate];
    for(EKEvent *event in events){
        NSLog(@"%@ - starts at %@", event.title, event.startDate);
    }

    

コード例

- (IBAction)pressFetchEvent:(id)sender {
    if(_eventStore == nil){
        _eventStore = [[EKEventStore alloc] init];
    }
    
    EKAuthorizationStatus authStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    
    switch (authStatus) {
        case EKAuthorizationStatusAuthorized:
            [self accessEvents];
            break;
        case EKAuthorizationStatusDenied:
        case EKAuthorizationStatusRestricted:
            [self presentDeniedAlert];
            break;
        case EKAuthorizationStatusNotDetermined:
            [_eventStore requestAccessToEntityType:EKEntityTypeEvent
                                        completion:^(BOOL granted, NSError *error)
             {
                 if(granted){
                     [self accessEvents];
                 }else{
                     [self presentDeniedAlert];
                 }
             }];
            break;
    }
}

- (void)accessEvents {
    NSArray *eventCalendars = [_eventStore calendarsForEntityType:EKEntityTypeEvent];
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
    oneDayAgoComponents.day = -1;
    NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                  toDate:[NSDate date]
                                                 options:0];
    
    NSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init];
    oneYearFromNowComponents.year = 1;
    NSDate *oneYearFromNow = [calendar dateByAddingComponents:oneYearFromNowComponents
                                                       toDate:[NSDate date]
                                                      options:0];
    
    NSPredicate *predicate;
    predicate = [_eventStore predicateForEventsWithStartDate:oneDayAgo
                                                     endDate:oneYearFromNow
                                                   calendars:eventCalendars];
    NSArray *events = [_eventStore eventsMatchingPredicate:predicate];
    NSLog(@"Events this week");
    for(EKEvent *event in events){
        NSLog(@"%@ - starts at %@", event.title, event.startDate);
    }
}

    

関連記事

no image

iPhoneシューティング

画面を縦にしてみた。基本的なロジックはそろそろ入れ終わりそう。次はステージの作り込みに入りた

記事を読む

skitched-20120830-152936.png

eラーニング版「Twitterアプリ for iPhone開発講座」販売開始!

     こんにちは。アキオ(@akio0911)です。      今年の

記事を読む

skitched-20120412-172614.png

Xcodeのリファレンスよりも快適! クラスリファレンスを素早く検索・表示できるアプリ「Dash」

     Dash (Docs & Snippets) カテゴリ: 開発ツール

記事を読む

20140530-000241.jpg

【Xcode 5】複数のストーリーボード間で画面遷移させる方法

今日は、ストーリーボードから他のストーリーボードへ画面遷移させる方法を紹介します。  

記事を読む

20140527-000424.jpg

CGPoint・CGSize・CGRectをログ出力する際に便利な関数

今日は、iOSアプリ開発でCGPoint・CGSize・CGRectをログ出力する際に便利な

記事を読む

skitched-20120423-100628.jpg

15時間でTwitterアプリ開発を行う初心者向け講座をやります

Photo by Rosaura Ochoa      5/12(土)・19

記事を読む

no image

オライリー「iPhone Hacks」書評

Iphone Hacks 作者: David Jurick,Adam Stolarz,D

記事を読む

skitched-20121010-112357.png

アドレス帳にアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法

     こんにちは。アキオ(@akio0911)です。 iOS 6からプライバ

記事を読む

no image

iOS5で搭載された新UI!UIStepper(ステッパー)の使い方

こんにちは。iOS5で追加された新しいAPIをいろいろと試している@akio0911です。

記事を読む

IMG_6430.png

カレンダー・リマインダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法

     こんにちは。アキオ(@akio0911)です。 アプリからiOSのカレ

記事を読む

20140714-144729.jpg
サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

アップルの開発者向けイベント「WWDC2014」に参加するため

slooProImg_20140714064146.jpg
ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

slooProImg_20140713230358.jpg
十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

slooProImg_20140712085918.jpg
大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

20140625-114250.jpg
ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑