如何使用 EKEventViewController 在我的应用程序中显示 EKEvent 邀请的详细信息?

PMT*_*PMT 4 calendar ios eventkit ekevent swift

简要总结

我希望我的应用程序的用户能够接受/拒绝他们日历的活动邀请。为此,我尝试使用 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

大问题: 每当我将 EKEvent 分配给 evc.event 时,它都会因为隐私侵犯问题而崩溃。请注意,我确实有权访问日历。

因侵犯隐私而崩溃

evc.event = event
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

边注

但是使用 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)
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

PMT*_*PMT 6

我终于解决了。看起来除了日历权限之外,我还需要添加到 info.plist 联系人权限中。

隐私 - 联系人使用说明

在此处输入图片说明