最近、iOS7 の EKEventStore から EKCalendar オブジェクトを受け取っていないことがわかりました。iOS 6.xx では、同じコード スニペットで問題はありません。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 オブジェクトを含む) セットを取得しました)。
ちなみに、カレンダーへのアクセスは許可されています。
助言がありますか?