在我的iOS应用程序中,我曾使用以下方法访问日历:
EKCalendar* cal = [eventStore calendarWithIdentifier:[calendarIDs objectAtIndex:i]];
通过以下方式向用户询问权限:
eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError* error){}
现在这在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.)"
我可以写\读日历没有问题,但我不明白为什么会引发这个异常。 我已经尝试了一些这里提出的方法,但在这种情况下它们似乎都没有。
答案 0 :(得分: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....
}
答案 1 :(得分:0)
代替
let matchedCal = eventStore
.calendar(withIdentifier: calendarIdentifier)
您可以使用:
let matchedCal = eventStore
.calendars(for: .event)
.first(where: { $0.calendarIdentifier == calendarIdentifier })