iOSでアプリからカレンダーに予定を追加する方法

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

    

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

前回はiPhoneのカレンダー情報を読み取る方法を解説しましたが、今回はアプリからカレンダーに予定を追加する方法を解説します。

    

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

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

スポンサード リンク

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

EKEventStoreオブジェクトを生成します。

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

    

    if(_eventStore == nil){
        _eventStore = [[EKEventStore alloc] init];
    }

    

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

    

カレンダーの情報にアクセスするには、まずカレンダーへのアクセス許可状況を確認する必要があります。

許可状況を確認するには、authorizationStatusForEntityType:メソッドを使います。

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

    

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

    

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

EKEventオブジェクトを生成します。

生成にはeventWithEventStore:メソッドを使います。

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

    

    EKEvent *event = [EKEvent eventWithEventStore:_eventStore];

    

EKEventオブジェクトにタイトルや開始時刻などを設定する

生成したEKEventオブジェクトにタイトルや開始時刻などを設定します。

以下がそのコードです。

    

    event.title = @"EventKitテスト";
    event.timeZone = [NSTimeZone defaultTimeZone];
    event.startDate = [NSDate date];
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; // 1時間
    event.calendar = _eventStore.defaultCalendarForNewEvents;

    

変更を保存する

行った変更を保存するにはsaveEvent:span:commit:error:メソッドを呼び出します。

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

    

    NSError *error = NULL;
    BOOL result = [_eventStore saveEvent:event
                                    span:EKSpanThisEvent
                                  commit:YES
                                   error:&error];
    NSString *message = nil;
    if(result){
        message = [NSString stringWithFormat:@"イベントの保存が完了しました。"];
    }else{
        message = [NSString stringWithFormat:@"イベントの保存ができませんでした。 : %@", error];
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                                                    message:message
                                                   delegate:nil
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"OK", nil];
    [alert show];

    

コード例

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

- (void)createEvent {
    EKEvent *event = [EKEvent eventWithEventStore:_eventStore];
    event.title = @"EventKitテスト";
    event.timeZone = [NSTimeZone defaultTimeZone];
    event.startDate = [NSDate date];
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; // 1時間
    event.calendar = _eventStore.defaultCalendarForNewEvents;
    
    NSError *error = NULL;
    BOOL result = [_eventStore saveEvent:event
                                    span:EKSpanThisEvent
                                  commit:YES
                                   error:&error];
    NSString *message = nil;
    if(result){
        message = [NSString stringWithFormat:@"イベントの保存が完了しました。"];
    }else{
        message = [NSString stringWithFormat:@"イベントの保存ができませんでした。 : %@", error];
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
                                                    message:message
                                                   delegate:nil
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"OK", nil];
    [alert show];
}

    

関連記事

skitched-20120830-152936.png

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

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

記事を読む

no image

ImagePickerControllerのタッチイベントをカスタマイズしたい

UIImagePickerControllerを継承して、touchesEndedをオーバーライド

記事を読む

no image

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

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

記事を読む

no image

iPhone adhoc ビルドの手順

iPhone のプログラムポータルで配信証明書を作成、ダウンロード 配信証明書をダブルクリ

記事を読む

20140416-192437.jpg

【iPhoneアプリ開発】UINavigationBarに複数のUIBarButtonItemを配置する方法

UINavigationBarの左側や右側に、複数のUIBarButtonItemを配置する

記事を読む

no image

検索キーワードにひらがなを入れてみよう

Tweet ども、@akio0911 です。 AppStoreでアプリを検索する時って、ひらが

記事を読む

skitched-20110924-214605.jpg

第11回 南東京iPhone開発者勉強会に参加してきました

南東京iPhone開発者勉強会 11回目に参加してきました。 会場となった

記事を読む

skitched-20121010-112357.png

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

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

記事を読む

20140527-000424.jpg

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

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

記事を読む

no image

iPhoneシューティング

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

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑