Определить, есть ли у вашего приложения доступ к календарю, не инициируя запрос?

Я реализую возможность добавлять и удалять созданные пользователем события из календаря iOS из своего приложения. Я закодировал запрос на разрешение доступа к календарю, когда пользователь создает событие, и он отлично работает. Я сохраняю событие на сервере и разрешаю им позже удалить событие, а когда это происходит, я также удаляю событие из календаря. Возможно, кто-то может создать событие вне этого приложения, открыть приложение, а затем удалить встречу, полученную с сервера. В этом случае в календаре не хранится событие, но все равно нужно посмотреть, существует ли оно, чтобы попытаться удалить его, и оно терпит неудачу, потому что я не запрашивал разрешения пользователя на получение доступа к календарю в этом случае.

Но я не хочу спрашивать у пользователя разрешение при удалении, потому что пользователь понятия не имеет, зачем приложению нужен доступ к календарю, потому что они никогда не знали, что оно может сохранить встречу в календаре - они создали его на веб-сайте и нет причин, по которым они должны предоставить его в тот момент, потому что это все равно ничего не даст.

Поэтому мой вопрос: можно ли определить, имеет ли ваше приложение в настоящее время доступ к календарю, не отправляя запрос, который приведет к отображению автоматического предупреждения пользователю в случае, если разрешение не предоставлено - см. код запроса ниже? Я просто хочу найти событие, чтобы попытаться удалить его, только если у меня уже есть доступ к календарю, а если у меня его нет, я не буду пытаться ничего удалить.

[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (granted) {
        //already have access or user tapped on Allow in popup
    }
    ...

person Jordan H    schedule 01.07.2014    source источник
comment
Посмотрите на EKEventSource authorizationStatusForEntityType:.   -  person rmaddy    schedule 02.07.2014


Ответы (1)


Вы можете использовать [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]

Вам нужно проверить, возвращает ли этот метод EKAuthorizationStatusAuthorized, чтобы сделать вывод, что ваше приложение в настоящее время имеет доступ к календарю для данного типа объекта.

Дополнительные сведения можно найти в справочнике по классам здесь

person ryumer    schedule 01.07.2014
comment
Спасибо, не знал, что это статический метод, и был ужасно сбит с толку, когда не смог его найти. - person RESTfulGeoffrey; 08.01.2019
comment
просто и красиво ;) - person Bartłomiej Semańczyk; 25.03.2019