EKCalendar название возвращает ноль IOS 11
Этот код работал нормально до ios 11, но теперь в ios 11 идентификатор работает нормально, но заголовок возвращает ноль.
NSArray *availablePersonalCalendars = [eventStore calendarsForEntityType:EKEntityTypeEvent];
for (EKCalendar *cal in availablePersonalCalendars) {
NSLog(@"ID: %@", cal.calendarIdentifier);
NSLog(@"Title: %@", cal.title)
}
Пожалуйста, помогите мне, если вы знаете, как это исправить. Спасибо,
2 ответа
Решение
Я использовал этот код и работает правильно в iOS 11:
EKEventStore *store = [[EKEventStore alloc] init];
[store requestAccessToEntityType:EKEntityTypeEvent
completion:^(BOOL granted, NSError * _Nullable error) {
NSArray *availablePersonalCalendars = [store calendarsForEntityType:EKEntityTypeEvent];
for (EKCalendar *cal in availablePersonalCalendars) {
NSLog(@"ID: %@", cal.calendarIdentifier);
NSLog(@"Title: %@", cal.title);
}
}];
Также обязательно включите в plist ключ NSCalendarsUsageDescription с пояснительным текстом о том, как будет использоваться эта информация.
Вы должны хранить ссылку на ваш EKEventStore
объект. Так или иначе это связано с отсутствующими названиями календарей. Не забудьте запросить разрешения, прежде чем запрашивать календари.
Цель-C:
@interface Some ()
@property (nonatomic) EKEventStore *store;
@property (nonatomic) NSArray<EKCalendar *> *calendars;
@end
@implementation Some
- (void)prepare
{
self.store = [EKEventStore new];
self.calendars = @[];
}
- (void)loadCalendars
{
self.calendars = [self.store calendarsForEntityType:EKEntityTypeEvent];
}
@end
Свифт:
let store = EKEventStore()
var calendars: [EKCalendar] = []
func loadCalendars() {
calendars = store.calendars(for: .event)
}