无法从iOS7中的EKEventStore中检索EKCalendars

时间:2013-10-31 11:11:36

标签: objective-c ios7 ekeventkit

我最近发现,我在iOS7中没有从EKEventStore收到任何EKCalendar对象。在iOS 6.x.x中,相同的代码段没有问题。当我尝试访问defaultCalendarForNewEvents时 - 我确实收到一个EKCalendar对象(如预期的那样)。

我请求访问实体类型EKEntityTypeEvent。

摘录:

__block NSMutableArray *calendarsArray = nil;

if ([self.eventsStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
    [self.eventsStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (granted) {
            EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];

            if (status == EKAuthorizationStatusAuthorized) {
                calendarsArray = [[NSMutableArray alloc] initWithArray:[self.eventsStore calendarsForEntityType:EKEntityMaskEvent]];
            }
        } else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"You haven't granted access to calendars. Expected things are not going to happen." delegate:nil cancelButtonTitle:@"I understand" otherButtonTitles:nil];
            [alert show];
        }
    }];
} else {
    calendarsArray = [NSMutableArray arrayWithArray:[self.eventsStore calendarsForEntityType:EKEntityTypeEvent]];
}

我确实在calendarsArray中收到了0个对象。我还尝试通过“遍历”所有类型为Local或CalDAV的EKSource来获取它([source calendarsForEntityType:] - 得到相同的空(包含0对象)集。)

顺便说一下 - 授予日历访问权限。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

经过简短的调查后我发现,问题不在代码中。看来问题出在iOS 7.0.3本身。

从iDevice中删除所有同步的日历并将其添加回来后,所有日历都显示在本机日历应用程序和我制作的日历中。执行此操作后,我的代码能够从EventStore中检索日历,而不依赖于我将访问日历的方法(通过EKSources或EKEventStore本身)。