繁体   English   中英

(iOS Swift)在应用程序和Today Extension之间共享EKEventStore和访问

[英](iOS Swift) Share EKEventStore and access between app and Today Extension

我创建了一个主要由Today Extension使用的应用程序。 它必须有权访问日历,因为窗口小部件将显示即将发生的事件。 现在,我希望“主机应用程序”具有所有用户日历的列表,并让用户决定小部件应考​​虑从中获取事件的日历。

我的理解是,不应多次调用EKEventStore()初始化程序(在此示例中,由窗口小部件和主机应用程序调用)。 是否有一种简单的方法仅询问一次使用日历的权限(无论用户是否首先与主机应用程序或窗口小部件进行交互)并共享该权限,还是我必须在窗口小部件和主机中都检查权限?应用程式? 此外,理想情况下,我该如何在小部件和应用程序中同时使用EKEventStore()初始化程序?

回答这些问题以供将来参考:这是我的解决方案,它仅编写一次代码即可检查日历访问权限。 我创建了EKEventStore类的扩展,该扩展允许我调用一个将状态返回为布尔值的函数。 这使得在不同目标中使用此方法更加干净

public extension EKEventStore {

func hasCalendarAccess() -> Bool {
    let status = EKEventStore.authorizationStatusForEntityType(EKEntityType.Event)
    var accessGranted : Bool = false

    switch(status){
    case EKAuthorizationStatus.NotDetermined:
        requestAccessToEntityType(EKEntityType.Event, completion: {
            (returnValue: Bool, error: NSError?) in
            accessGranted = returnValue
        })
    case EKAuthorizationStatus.Authorized:
        accessGranted = true
    case EKAuthorizationStatus.Denied:
        accessGranted = false
    case EKAuthorizationStatus.Restricted:
        print("restricted")
        accessGranted = false
    }

    return accessGranted
}

感谢dan为EKEventStore的多个实例提供的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM