gpt4 book ai didi

ios - 为什么 Google 日历没有显示在 SwiftUI macOS 上的 EKCalendarChooser 中

转载 作者:行者123 更新时间:2023-12-05 06:55:29 26 4
gpt4 key购买 nike

每个人。

我在做什么:我正在编写一个程序,在适用于 iOS 和 macOS 的 SwiftUI 中执行各种与日期和时间相关的事情。当前版本的 UI 是用 SwiftUI 编写的。由于我的程序可以使用 EventKit(Calendar.app 中事件背后的引擎)并且 EventKitUI 还没有 SwiftUI 等效项,所以我有 EventKitUI View Controller 的包装器。

出了什么问题:我(除其他事项外)对 EKCalendarChooser 进行了包装,以允许用户选择他/她希望我的程序使用的外部事件日历。这在 iOS 上运行良好。然而,在 macOS 上,我的 Google 帐户中的事件日历不会出现,即使我的程序在 macOS 中显示了事件本身。确实会出现本地、iCloud 和“其他”事件日历。

我的代码:

import EventKitUI
import SwiftUI

struct ASAEKCalendarChooserView: UIViewControllerRepresentable {
func makeCoordinator() -> Coordinator {
return Coordinator(self)
}

@Environment(\.presentationMode) var presentationMode
var externalEventManager = ASAExternalEventManager.shared

var calendars: Set<EKCalendar>? = ASAExternalEventManager.shared.calendarSet

func makeUIViewController(context: UIViewControllerRepresentableContext<ASAEKCalendarChooserView>) -> UINavigationController {
let chooser = EKCalendarChooser(selectionStyle: .multiple, displayStyle: .allCalendars, entityType: .event, eventStore: externalEventManager.eventStore)
chooser.selectedCalendars = calendars ?? []
chooser.delegate = context.coordinator
chooser.showsDoneButton = true
chooser.showsCancelButton = true
return UINavigationController(rootViewController: chooser)
}

func updateUIViewController(_ uiViewController: UINavigationController, context: UIViewControllerRepresentableContext<ASAEKCalendarChooserView>) {
}

class Coordinator: NSObject, UINavigationControllerDelegate, EKCalendarChooserDelegate {
let parent: ASAEKCalendarChooserView

init(_ parent: ASAEKCalendarChooserView) {
self.parent = parent
}

func calendarChooserDidFinish(_ calendarChooser: EKCalendarChooser) {
debugPrint(#file, #function, calendarChooser)

let calendars = calendarChooser.selectedCalendars
parent.externalEventManager.calendars = Array(calendars)
ASAUserData.shared().savePreferences(code: .events)
parent.presentationMode.wrappedValue.dismiss()
}

func calendarChooserDidCancel(_ calendarChooser: EKCalendarChooser) {
debugPrint(#file, #function, calendarChooser)

parent.presentationMode.wrappedValue.dismiss()
}
}
}

注意:ASAExternalEventManager 是我的一个类,可以更轻松地处理 EKEventStore。

此外:“丢失”的事件日历显示在 macOS 和 iOS 的 Calendar.app 中。

有人知道我为什么会遇到这个问题吗?我不明白为什么在使用相同帐户的两台设备上运行相同的代码会产生两个明显不同的结果。

提前感谢任何人可以提供的帮助。

最佳答案

我也遇到了完全相同的问题。我对此没有解决方案......但我试图从 Eventstore 获取日历的来源。然后我在 Mac 上运行我的应用程序,它列出了所有日历,包括来自 Google 的日历。所以我猜不知何故 EKCalendarChooser 看不到来自谷歌的日历。正如 א한ן אדלמן 所建议的那样,可能我必须使用 SwiftUI 创建自己的日历选择器界面。但同样,与应该正常工作的 EKCalendarChooser 相比,这需要做很多工作。

关于ios - 为什么 Google 日历没有显示在 SwiftUI macOS 上的 EKCalendarChooser 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65328637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com