EKEventStore requestAccess() не отображает приглашение пользователя в iOS 9 ⇐ IOS
-
Anonymous
EKEventStore requestAccess() не отображает приглашение пользователя в iOS 9
Я столкнулся со странным случаем при запросе доступа к Календарю в iOS 9. Логика работает нормально на всех устройствах iOS 10.
В нашем случае мы добавили кнопку на панель инструментов, которую пользователь нажимает, чтобы добавить событие в свой календарь.
Поэтому мы не проверяем разрешение на доступ к календарю до тех пор, пока пользователь впервые не нажмет кнопку «Добавить в календарь». Вот так:
@IBAction func addToCalendarPressed(_ sender: UIBarButtonItem) { eventStore.requestAccess(to: .event, завершение: { (предоставлено, ошибка) в if (предоставлено) && (ошибка == ноль) { // Представляем EKEventEditViewController } еще { // Делаем что-то еще (показываем предупреждение) } }) } В iOS 10 приложение отображает запрос на доступ к Календарю, как и следовало ожидать. В iOS 9.x приглашение не отображается, обработчик завершения срабатывает немедленно, а предоставленное значение возвращает false.
Хуже того, несмотря на то, что проверка «Разрешения Календарю», кажется, завершена, вы не можете зайти в «Настройки» и вручную включить доступ к Календарю. Что касается устройства, приложение не проверяло разрешения, поэтому оно никогда не отображается в разделе «Настройки» > «Конфиденциальность» > «Календарь».
Я пытался переместить проверку в viewWillAppear или viewDidLoad вместо того, чтобы ждать, пока пользователь нажмет кнопку, но это все равно не работает. Я извлек несколько примеров приложений с проверкой событий, и они работают в iOS 9. Я просто не смог понять, почему в этом случае приглашение не работает.
Приложение также проверяет местоположение (но не на этом экране), и в iOS 9 оно работает корректно.
Я столкнулся со странным случаем при запросе доступа к Календарю в iOS 9. Логика работает нормально на всех устройствах iOS 10.
В нашем случае мы добавили кнопку на панель инструментов, которую пользователь нажимает, чтобы добавить событие в свой календарь.
Поэтому мы не проверяем разрешение на доступ к календарю до тех пор, пока пользователь впервые не нажмет кнопку «Добавить в календарь». Вот так:
@IBAction func addToCalendarPressed(_ sender: UIBarButtonItem) { eventStore.requestAccess(to: .event, завершение: { (предоставлено, ошибка) в if (предоставлено) && (ошибка == ноль) { // Представляем EKEventEditViewController } еще { // Делаем что-то еще (показываем предупреждение) } }) } В iOS 10 приложение отображает запрос на доступ к Календарю, как и следовало ожидать. В iOS 9.x приглашение не отображается, обработчик завершения срабатывает немедленно, а предоставленное значение возвращает false.
Хуже того, несмотря на то, что проверка «Разрешения Календарю», кажется, завершена, вы не можете зайти в «Настройки» и вручную включить доступ к Календарю. Что касается устройства, приложение не проверяло разрешения, поэтому оно никогда не отображается в разделе «Настройки» > «Конфиденциальность» > «Календарь».
Я пытался переместить проверку в viewWillAppear или viewDidLoad вместо того, чтобы ждать, пока пользователь нажмет кнопку, но это все равно не работает. Я извлек несколько примеров приложений с проверкой событий, и они работают в iOS 9. Я просто не смог понять, почему в этом случае приглашение не работает.
Приложение также проверяет местоположение (но не на этом экране), и в iOS 9 оно работает корректно.
Мобильная версия