我需要获得使用iOS提醒的权限,并且我要这样做:
switch EKEventStore.authorizationStatus(for: .reminder) {
case .authorized:
print("Access granted")
//everything's normal here
//executing my function here
case .denied:
print("Access denied")
case .notDetermined:
print("not defined yet")
//No determined so asking for permission
self.eventStore.requestAccess(to: .reminder) { (granted, error) -> Void in
if granted == true {
print("permission granted")
//executing my function here after getting permissions but this piece of code executes after a long delay
//this piece of codes are executing after a while say 5-10 seconds
}else if error != nil{
print("ther's an error : \(error)")
}
}
default:
print("Case Default")
}
如上所述,当app提示用户获取Reminder的权限时,用户授予权限我的下一个Function已执行但过了一段时间(5-10秒)
任何人都可以解释为什么会这样?
答案 0 :(得分:1)
请求权限纯粹是一个异步过程,您不能立即执行该功能,因为无法从我们的代码控制。应用程序代码可以请求权限,当操作系统授予权限时,我们会获得委托回调处理程序,根据实际接收请求权限的延迟。
您也可能正在请求未在主UI线程上运行的线程/块的权限,并且执行该代码时会出现不可见的延迟。您必须检查启动权限请求的代码。
答案 1 :(得分:1)
requestAccess的完成不会在主线程上调用。将permissions granted
代码放在Dispatch Async中:
DispatchQueue.main.async {
print("permission granted")
}