Как я могу отобразить детали приглашения EKEvent в моем приложении, используя EKEventViewController?
КРАТКОЕ СОДЕРЖАНИЕ
Я хочу, чтобы пользователи моего приложения могли принимать / отклонять приглашения на мероприятия в своем календаре. Для этого я пытаюсь вызвать событие с помощью компонентов EventKitUI и позволить пользователю обновить событие, не покидая моего приложения. Проблема в том, что он вылетает всякий раз, когда я назначаю EKEvent EKEventViewController.
ДЕТАЛЬНОЕ ОБЪЯСНЕНИЕ
ЧТО Я ХОЧУ:
Чтобы отобразить аналогичное представление, как в собственном календаре iOS, оно должно выглядеть примерно так:
ЧТО Я ИМЕЮ:
import UIKit
import EventKitUI
class CalendarViewController: UIViewController, EKEventViewDelegate, EKEventEditViewDelegate {
var meetingID = "id"
override func viewDidLoad() {
super.viewDidLoad()
//self.showEditEvent(meeting: meetingID)
self.showInvite(meeting: meetingID)
}
func showInvite(meeting: Meeting){
let evc = EKEventViewController()
var event = EKEvent(eventStore: MeetingsFetcher.eventStoreClass)
event = MeetingsFetcher.eventStoreClass.event(withIdentifier: meetingID)!
evc.delegate = self
evc.event = event
evc.allowsEditing = true
evc.allowsCalendarPreview = true
self.screen.present(evc, animated: true, completion: nil)
}
func eventViewController(_ controller: EKEventViewController, didCompleteWith action: EKEventViewAction) {
controller.dismiss(animated: true, completion: nil)
}
}
БОЛЬШАЯ ПРОБЛЕМА: всякий раз, когда я назначаю EKEvent на evc.event, он вылетает из-за проблем нарушения конфиденциальности. Обратите внимание, что у меня есть разрешение на доступ к календарю.
Крушение из-за нарушения конфиденциальности
evc.event = event
ПОБОЧНЫЕ ЗАМЕЧАНИЯ
Это работает, хотя, чтобы открыть представление редактирования собрания с помощью EKEventEditViewController(), что доказывает это.
- У меня есть авторизация для доступа к календарю
- Встреча существует
Так что этот код работает, но это не та точка зрения, которую я искал:
func showEditEvent(meeting: Meeting){
let evc = EKEventEditViewController()
evc.eventStore = MeetingsFetcher.eventStoreClass
var event = EKEvent(eventStore: MeetingsFetcher.eventStoreClass)
event = MeetingsFetcher.eventStoreClass.event(withIdentifier: meeting.UUID!)!
evc.event = event
evc.editViewDelegate = self
self.screen.present(evc, animated: true, completion: nil)
}
func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
controller.dismiss(animated: true, completion: nil)
}
1 ответ
Я наконец решил это. Похоже, кроме разрешения календаря, мне нужно также добавить в разрешение контактов info.plist.
Конфиденциальность - Контакты Использование Описание