如何使用 EKEventViewController 在我的应用程序中显示 EKEvent 邀请的详细信息?
How can I display the details of a EKEvent invitation within my app using EKEventViewController?
简要总结
我希望我的应用程序的用户能够accept/decline他们日历的活动邀请。
为此,我尝试使用 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 时,它都会因为隐私侵犯问题而崩溃。请注意,我确实有权访问日历。
CRASHING DUE TO PRIVACY VIOLATION
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)
}
我终于解决了。看起来除了日历权限外,我还需要添加到 info.plist 联系人权限中。
Privacy - Contacts Usage Description
简要总结
我希望我的应用程序的用户能够accept/decline他们日历的活动邀请。 为此,我尝试使用 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 时,它都会因为隐私侵犯问题而崩溃。请注意,我确实有权访问日历。
CRASHING DUE TO PRIVACY VIOLATION
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)
}
我终于解决了。看起来除了日历权限外,我还需要添加到 info.plist 联系人权限中。
Privacy - Contacts Usage Description