swift - 如何修复错误“未设置开始日期”?
问题描述
在常规日历中保存事件时,有时不会保存事件。显示错误:"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")
}
}
}
如何修复此错误?
解决方案
问题是您将设置的属性包装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)
}
...
推荐阅读
- java - 使用 BitmapFactory 在画布上的 onDraw 错误
- delphi - 如何知道我的一个孩子是否得到了一些鼠标事件?
- c# - 如何调试“关键字 X 附近的语法不正确”的数据库错误?
- r - 使用列的前一行值作为当前行值的参数创建一个新的 tibble
- list - 测试我的代码时出现大索引的问题
- ios - iOS 通用链接是否支持在没有 Web 服务器的情况下工作?
- javascript - Javascript,在地图期间动态创建一个空对象副本
- c# - 如何使用 C# 通过他的 ID 获取当前登录的用户?
- html - 如何在 Angular 的对话框中显示输入更改?
- javascript - 如何检索包含特定字符串的特定对象