首页 > 解决方案 > 如何修复错误“未设置开始日期”?

问题描述

在常规日历中保存事件时,有时不会保存事件。显示错误:"failed to save event with error: Error Domain = EKErrorDomain Code = 2" No start date has been set. "UserInfo = {NSLocalizedDescription = No start date has been set.}", 虽然日期确定正确

func saveTaskInCalendar() {
        let eventStore : EKEventStore = EKEventStore()
        eventStore.requestAccess(to: .event) { (granted, error) in
            if (granted) && (error == nil) {
                let event: EKEvent = EKEvent(eventStore: eventStore)
                DispatchQueue.main.async {
                    event.title = "Test"
                    event.startDate = Date()
                    event.endDate = Date()
                }
                event.calendar = eventStore.defaultCalendarForNewEvents
                do {
                    try eventStore.save(event, span: .thisEvent)
                } catch let error as NSError {
                    print("failed to save event with error : \(error)")
                }
            }
            else {
                print("failed to save event with error : \(String(describing: error)) or access not granted")
            }
        }
    }

如何修复此错误?

标签: swiftekeventstore

解决方案


问题是您将设置的属性包装EKEvent在调度异步块中,同时将偶数保存在异步块之外。这可能会导致在您尝试保存事件执行属性设置。

要么删除DispatchQueue.main.async调用,因为无论如何都不需要它,要么将保存代码也放入调度异步中。

let event: EKEvent = EKEvent(eventStore: eventStore)
event.title = "Test"
event.startDate = Date()
event.endDate = Date()
event.calendar = eventStore.defaultCalendarForNewEvents
do {
    try eventStore.save(event, span: .thisEvent)
}

或者

DispatchQueue.main.async {
    let event: EKEvent = EKEvent(eventStore: eventStore)
    event.title = "Test"
    event.startDate = Date()
    event.endDate = Date()
    event.calendar = eventStore.defaultCalendarForNewEvents
    do {
        try eventStore.save(event, span: .thisEvent)
    }
...

推荐阅读