EventKit从日历

时间:2018-05-19 13:22:09

标签: ios swift calendar eventkit

这是我将所有事件添加到我的日历中的方式,这些事件来自表格视图。当表视图中的行被删除时,我甚至从日历中删除特定的问题。我正在尝试的代码似乎没有在日历中找到和标识符。你能告诉我我在这里失踪了吗

添加到日历

let eventStore : EKEventStore = EKEventStore()

// 'EKEntityTypeReminder' or 'EKEntityTypeEvent'

eventStore.requestAccess(to: .event) { (granted, error) in

    if (granted) && (error == nil) {
        print("granted \(granted)")
        print("error \(error)")

        let event:EKEvent = EKEvent(eventStore: eventStore)

        event.title = "Test Title"
        event.startDate = Date()
        event.endDate = Date()
        event.notes = "This is a note"
        event.calendar = eventStore.defaultCalendarForNewEvents
        do {
            try eventStore.save(event, span: .thisEvent)
        } catch let error as NSError {
            print("failed to save event with error : \(error)")
        }
        print("Saved Event")
    }
    else{

        print("failed to save event with error : \(error) or access not granted")
    }
}

从日历中删除

func deleteEvent(_ storedEventID: String)
{
    eventStore.requestAccess(to: .event, completion: { (granted, error) in
        if (granted) && (error == nil)
        {

            if let calendarEvent_toDelete = self.eventStore.event(withIdentifier: storedEventID){

                //recurring event
                if calendarEvent_toDelete.recurrenceRules?.isEmpty == false
                {
                    let alert = UIAlertController(title: "Repeating Event", message:
                        "This is a repeating event.", preferredStyle: UIAlertControllerStyle.alert)

                    //delete this event only
                    let thisEvent_Action = UIAlertAction(title: "Delete this event", style: UIAlertActionStyle.default)
                    {
                        (result : UIAlertAction) -> Void in

                        //sometimes doesn't delete anything, sometimes deletes all reccurent events, not just current!!!
                        do{
                            try self.eventStore.remove(calendarEvent_toDelete, span: .thisEvent)
                        } catch let e as NSError{return}

                    }


                    alert.addAction(thisEvent_Action)

                }
                    //not recurring event
                else{
                    //works fine
                    do{
                        try self.eventStore.remove(calendarEvent_toDelete, span: EKSpan.thisEvent)
                    } catch let e as NSError{
                        return
                    }
                }
            }

        }
    })
}

1 个答案:

答案 0 :(得分:0)

我在示例中缺少的是将更改提交到事件存储。

在批量处理多个事件时立即提交更改或单独提交。

try? self.eventStore.remove(eventToRemove, span: .thisEvent, commit: true)

祝你好运并取得成功。