4

我在使用 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
  • 带 Retina 显示屏的 iPad Mini(真实设备)上出现问题

更新

更改EKEntityTypeReminderEKEntityTypeEvent(对不起,我的错误)实际上不会产生错误,但现在该事件甚至没有出现在日历中。我检查了 和 的输出,granted我分别err看到了falsenil

4

2 回答 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.")
}

希望这可以帮助!

-戈罗夫斯基

于 2015-01-24T20:26:14.597 回答
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 {
  }
}
于 2021-09-09T10:59:24.247 回答