1. ホーム
  2. ios

[解決済み] iPhoneカレンダーにプログラムによるカスタムイベントを追加する

2022-04-17 06:19:43

質問

カスタムアプリからiPhoneのカレンダーにiCalのイベントを追加する方法はありますか?

解決方法を教えてください。

ベースは Appleドキュメント iOS 6.0から少し変更されました。

1) ユーザーのカレンダーへのアクセスを "requestAccessToEntityType:completion:" で要求し、ブロック内でイベント処理を実行します。

2) イベントをコミットするか、save/remove の呼び出しに "commit" パラメータを渡す必要があります。

他はすべてそのままで・・・。

EventKitフレームワークを追加し #import <EventKit/EventKit.h> をあなたのコードに追加してください。

この例では、NSString *savedEventId インスタンスプロパティを持っています。

イベントを追加するには

    EKEventStore *store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = @"Event Title";
        event.startDate = [NSDate date]; //today
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        event.calendar = [store defaultCalendarForNewEvents];
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
        self.savedEventId = event.eventIdentifier;  //save the event id if you want to access this later
    }];

イベントを削除します。

    EKEventStore* store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
        if (eventToRemove) {
            NSError* error = nil;
            [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
        }
    }];

複数のカレンダーを持っている場合は、どれがデフォルトのカレンダーかを確認する必要があります。

Swiftバージョン

EventKitフレームワークをインポートする必要があります

import EventKit

イベント追加

let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
    if !granted { return }
    var event = EKEvent(eventStore: store)
    event.title = "Event Title"
    event.startDate = NSDate() //today
    event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
    event.calendar = store.defaultCalendarForNewEvents
    do {
        try store.saveEvent(event, span: .ThisEvent, commit: true)
        self.savedEventId = event.eventIdentifier //save event id to access this particular event later
    } catch {
        // Display error to user
    }
}

イベントの削除

let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
    if !granted { return }
    let eventToRemove = store.eventWithIdentifier(self.savedEventId)
    if eventToRemove != nil {
        do {
            try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
        } catch {
            // Display error to user
        }
    }
}