我创建了一个主要由Today Extension使用的应用。它必须能够访问日历,因为窗口小部件显示即将发生的事件。现在我希望“主机应用程序”拥有所有用户日历的列表,并让用户决定小部件应该考虑从哪些日历获取事件。
我的理解是不应该多次调用EKEventStore()初始值设定项(在此示例中由窗口小部件和主机应用程序调用)。 有没有一种简单的方法可以只询问一次使用日历的权限(无论用户是首先与主机应用程序还是小部件交互)并共享权限,还是我必须在小部件和主机中检查权限应用程序吗?另外,我应该如何处理在窗口小部件和应用程序中使用EKEventStore()初始化程序?
答案 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的多个实例的答案