EventKit удалить событие из календаря - PullRequest
0 голосов
/ 19 мая 2018

Это способ, которым я добавляю все события в свой календарь, эти события поступают из таблицы.У меня есть проблема с удалением определенного даже из календаря, когда строка в табличном представлении удаляется.Кажется, код, который я пытаюсь найти, не находит и не идентифицирует в календаре.Подскажите, пожалуйста, что мне здесь не хватает

ДОБАВИТЬ В КАЛЕНДАРЬ

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 голосов
/ 21 мая 2018

В вашем примере мне не хватает зафиксировать изменения в хранилище событий.

Зафиксируйте изменения немедленно или с отдельной фиксацией при массовой обработке нескольких событий.

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

Удачи и успехов.

...