Swift カレンダー、イベント追加、カレンダー(EKCalendar)設定

「Swift カレンダー、イベント追加」の続き

イベントにカレンダー(EKCalendar)設定

「Swift カレンダー、イベント追加」時はデフォルトカレンダー設定

event.calendar = eventStore.defaultCalendarForNewEvents

EKEvent.calendarは「var calendar: EKCalendar! { get set }」です。
EKCalendarを設定すればいい事が分かります。

問題

ここで嵌りました。
UIでカレンダー選択させる為に、カレンダーを取得、保存していました。

let calendars = eventStore.calendars(for: .event)

この保存していたカレンダーから選択したものを「var calendar: EKCalendar! { get set }」に設定しました。
結果、エラーになるのです。
「Attempting a cross-store copy for object of type EKCalendar」
コピー出来ないという事です。

解決方法

EKEventStoreの「calendarItem(withIdentifier:)」を使用します。
保存していたカレンダー(EKCalendae)のcalendarIdentifierを使用します。

let event = EKEvent(eventStore: eventStore)
event.title = self.titleText.text
event.startDate = self.startDatePicker.date
event.endDate = self.endDatePicker.date
let calendar = self.calendars[calendarPicker.selectedRow(inComponent: 0)]
event.calendar = eventStore.calendar(withIdentifier: calendar!.calendarIdentifier)
if allday == true {
    event.isAllDay = true
}
do {
    try eventStore.save(event, span: .thisEvent)
}
catch {
    let nserror = error as NSError
    print(nserror)
}

Swift

Posted by shi-n