[英](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.