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



