使用calendarWithIdentifier的EKCADErrorDomain

wht*_*man 12 iphone ios ekeventstore ios8

在我的iOS应用程序中,我曾使用以下方法访问日历:

EKCalendar* cal = [eventStore calendarWithIdentifier:[calendarIDs objectAtIndex:i]];
Run Code Online (Sandbox Code Playgroud)

通过以下方式向用户询问权限:

eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError* error){}
Run Code Online (Sandbox Code Playgroud)

现在这在iOS 7上工作正常,但在iOS 8上,每次调用方法calendarWithIdentfier时我都会遇到以下错误:

Error getting shared calendar invitations for entity types 3 from daemon: 
Error Domain=EKCADErrorDomain Code=1013 
"The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
Run Code Online (Sandbox Code Playgroud)

我可以写\读日历没有问题,但我不明白为什么会引发这个异常.我已经尝试了一些这里提出的方法,但在这种情况下它们似乎都没有.

iam*_*lam 10

我也被同样愚蠢的事情困扰了.

我只是根据标识符循环一系列日历并进行匹配.它不优雅,但它的工作原理,普通用户可能只有不到10个日历,所以......哦......

这是我在swift中的解决方法

func createEvent(){
    var event = EKEvent(eventStore: self.eventStore)
    var calendar : EKCalendar!
    let calendars : [EKCalendar] = self.eventStore.calendarsForEntityType(EKEntityTypeEvent) as [EKCalendar]

    for aCal in calendars
    {
        if(aCal.calendarIdentifier == self.calendarIdentifier)
        {
            calendar = aCal
            break
        }
    } ...continue to do stuff to events....

}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这也让我感到难过.写一个更简洁的方法:`让allCalendars:[EKCalendar] = self.eventStore.calendarsForEntityType(EKEntityTypeEvent)as [EKCalendar]````let calendars = allCalendars.filter {$ 0.calendarIdentifier == self.calendarIdentifier}` (2认同)