Как я могу отобразить детали приглашения 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.

Конфиденциальность - Контакты Использование Описание

Другие вопросы по тегам