功能执行延迟(请求访问权限后)IOS

时间:2016-12-15 15:06:17

标签: ios swift3 ekeventstore

我需要获得使用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秒)

任何人都可以解释为什么会这样?

2 个答案:

答案 0 :(得分:1)

请求权限纯粹是一个异步过程,您不能立即执行该功能,因为无法从我们的代码控制。应用程序代码可以请求权限,当操作系统授予权限时,我们会获得委托回调处理程序,根据实际接收请求权限的延迟。

您也可能正在请求未在主UI线程上运行的线程/块的权限,并且执行该代码时会出现不可见的延迟。您必须检查启动权限请求的代码。

答案 1 :(得分:1)

requestAccess的完成不会在主线程上调用。将permissions granted代码放在Dispatch Async中:

DispatchQueue.main.async {
  print("permission granted")
}