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]; }