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 с пояснительным текстом о том, как будет использоваться эта информация.

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

Вы должны хранить ссылку на ваш 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)
}
Другие вопросы по тегам