#ios #swift #calendar #ekevent #ekeventstore
#iOS #swift #Календарь #ekevent #ekeventstore
Вопрос:
У меня есть приложение, в котором я должен добавлять события в календарь по умолчанию, который работал нормально до iOS 10. Теперь в iOS 10 он не предоставляет доступ. Я установил use legacy swift language version
значение yes
. Мой код
let eventStore = EKEventStore()
switch EKEventStore.authorizationStatusForEntityType(EKEntityType.Event) {
case .Authorized:
//access
case .Denied:
print("Access denied")
case .NotDetermined:
eventStore.requestAccessToEntityType(EKEntityType.Event, completion:
{[weak self] (granted: Bool, error: NSError?) -> Void in
if granted {
//access
} else {
print("Access denied")
}
})
default:
print("Case Default")
}
Во время отладки моего приложения происходит сбой eventStore.requestAccessToEntityType
в Xcode 8.
Мое приложение работает, и мне нужно его решить. Любая помощь уместна. Заранее спасибо.
Ответ №1:
В сборках iOS 10 необходимо установить сообщение с описанием для предупреждения о разрешении в Info.plist
Важно: приложение iOS, связанное с iOS 10.0 или после нее, должно включать в свой файл Info.plist ключи описания использования для типов данных, к которым ему необходимо получить доступ, иначе произойдет сбой. Для конкретного доступа к данным напоминаний и календаря они должны включать NSRemindersUsageDescription и NSCalendarsUsageDescription соответственно.
Комментарии:
1. Действительно странно, что он просто вылетает без предупреждения или вывода на консоль. Обычно вы получаете явное предупреждение об этом.
2. Я согласен, должно быть какое-то предупреждение, то же самое происходило с разрешением камеры, мне потребовалось некоторое время, чтобы разобраться
Ответ №2:
let eventStore = EKEventStore()
switch EKEventStore.authorizationStatus(for: .event) {
case .authorized: break
//access
case .denied:
print("Access denied")
case .notDetermined:
eventStore.requestAccess(to: .event, completion:
{[weak self] (granted: Bool, error: Error?) -> Void in
if granted {
//access
} else {
print("Access denied")
}
})
default:
print("Case Default")
}
С XCode 8 и swift 3 это новый формат. Вы тестировали свое приложение на iOS 10.
Комментарии:
1. Да, у меня есть тест в iOS 10 — Xcode 8. И я не перешел на swift 3. Для проблемы пользовательского интерфейса с раскадровкой в Xcode 8 я должен использовать Xcode 7.3.