获取新事件的默认日历出错 - Swift

5
我在使用Swift时,在iOS的日历应用程序中创建新事件时遇到了问题。
目前我所拥有的代码如下:
func addToCal(){
    let eventStore = EKEventStore()
    
    eventStore.requestAccessToEntityType(EKEntityTypeReminder) {
        (granted: Bool, err: NSError!) in
        if granted && !err {
            var event:EKEvent = EKEvent(eventStore: eventStore)
            event.title = self.eventTitle!.text
            event.startDate = self.eventData.startDateObj
            event.endDate = self.eventData.endDateObj
            event.calendar = eventStore.defaultCalendarForNewEvents
            eventStore.saveEvent(event, span: EKSpanThisEvent, error: nil)
            println("Saved Event")
        }
    }

我收到的错误信息如下:

Error getting default calendar for new events: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"

我检查了我的语法,我很确定我没错,所以有人可以帮我找出哪里出错了吗?

额外信息

  • iOS 8测试版5
  • Xcode 6测试版5
  • 问题出现在iPad Mini w/ Retina显示屏(真实设备)上

更新

EKEntityTypeReminder更改为EKEntityTypeEvent(对不起,是我的错误)实际上并不会产生错误,但现在该事件甚至不会出现在日历中。我检查了grantederr的输出,我看到分别为falsenil

2个回答

0
我认为你的主要问题是你没有提交新事件以保存。以下是我使用的代码,主要区别在于我的代码包括提交并允许我的错误在有错误时更改为“nil”。最后的条件语句只是将任何保存错误或保存成功的报告打印到调试区域。
let eventStore = EKEventStore()
let event = EKEvent(eventStore: eventStore)

event.title = "Your Event Title Here" // Sets event's title
event.startDate = NSDate() // Sets event's start date
event.endDate = event.startDate.dateByAddingTimeInterval(20000) // Sets event's end date
event.calendar = eventStore.defaultCalendarForNewEvents // Selects default calendar

var saveError : NSError? = nil // Initially sets errors to nil
eventStore.saveEvent(event, span: EKSpanThisEvent, commit: true, error: &saveError) // Commits changes and allows saveEvent to change error from nil 

//// Following checks for errors and prints result to Debug Area ////
if saveError != nil {
    println("Saving event to Calendar failed with error: \(saveError!)")
} else {
    println("Successfully saved '\(event.title)' to '\(event.calendar.title)' calendar.")
}

希望这能有所帮助!
-Gorowski

顺便说一下,我在调试中也遇到了那个错误,但是它仍然可以正常保存。 - Gorowski
另外,我不确定您是否可以将EKEntityType更改为Reminder,因为它试图保存到“提醒事项”应用程序,而不是日历。 - Gorowski
你应该使用 if let 来解包可选的 saveError,即 "if let saveError = saveError {...}"。 - Leo Dabus

0

一旦授权访问,您需要设置“eventStore”:

eventStore.requestAccess(to: .event) { (granted, error) in
      if (granted) && (error == nil) {
        
        //Set event store now access granted
        eventStore = EKEventStore()
        
        //Save calendar event here...
    } else {
  }
}

你能详细说明一下吗?为什么需要重新创建EKEventStore实例? - damirstuhec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接