【问题标题】:Error Getting Default Calendar For New Events - Swift获取新事件的默认日历时出错 - Swift
【发布时间】:2014-08-17 04:00:18
【问题描述】:

我在使用 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(真实设备)上

更新

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

【问题讨论】:

    标签: swift ios8 ekeventstore


    【解决方案1】:

    我认为您的主要问题是您没有提交要保存的新事件。以下代码是我使用的代码,主要区别在于我的代码包含一个提交,如果有一个错误,则允许将我的错误从“nil”更改为“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.")
    }
    

    希望这会有所帮助!

    -戈罗夫斯基

    【讨论】:

    • 顺便说一句,我在调试中也遇到了这个错误,但它保存没有任何问题。
    • 另外,我不确定您是否可以将 EKEntityType 更改为提醒,因为它试图保存到“提醒”应用,而不是日历。
    • 你应该使用 if let 来解开可选的 saveError "if let saveError = saveError {...}"
    【解决方案2】:

    一旦授予访问权限,您需要设置“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 的实例?
    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多