(iOS Swift)共享EKEventStore并在app和Today Extension之间进行访问

时间:2016-02-22 20:38:56

标签: ios iphone swift today-extension ekeventstore

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

我的理解是不应该多次调用EKEventStore()初始值设定项(在此示例中由窗口小部件和主机应用程序调用)。 有没有一种简单的方法可以只询问一次使用日历的权限(无论用户是首先与主机应用程序还是小部件交互)并共享权限,还是我必须在小部件和主机中检查权限应用程序吗?另外,我应该如何处理在窗口小部件和应用程序中使用EKEventStore()初始化程序?

1 个答案:

答案 0 :(得分:0)

回答问题以备将来参考: 这是我解决只编写代码以检查日历访问一次的问题的解决方案。我创建了一个EKEventStore类的扩展,它允许我调用一个返回状态为boolean的函数。这使得在不同目标中使用它更加干净

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的多个实例的答案