2016-12-15 1 views
0

Ich brauche die Erlaubnis für iOS Erinnerung mit und für, dass ich das tue:Funktion Ausführung verzögert (nach Zugriffsberechtigung anfordern) 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") 
} 

Wie oben erläutert, wenn App fordert den Benutzer um Erlaubnis von Erinnerung und Benutzer gewährt die Erlaubnis meine nächste Funktion wurde ausgeführt, aber nach einer Weile (5-10 Sekunden)

kann jeder erklären, warum passiert es?

Antwort

1

Der Abschluss von requestAccess wird nicht im Hauptthread aufgerufen. Setzen Sie permissions granted Code innerhalb Dispatch Async:

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

hey man danke, dass du reagierst, schätze deine Mühe. –

1

Das Anfordern von Berechtigungen ist ein reiner Asynchorn-Prozess und Sie können die Funktion nicht einfach sofort ausführen, da dies nicht über unseren Code gesteuert werden kann. Der Anwendungscode kann eine Berechtigung anfordern, und wir erhalten den Delegaten-Callback-Handler, wenn die Berechtigungen vom Betriebssystem gewährt werden, basierend darauf, dass beim tatsächlichen Empfangen der angeforderten Berechtigungen eine Verzögerung auftritt.

Es ist auch möglich, dass Sie die Berechtigungen aus dem Thread/Block anfordern, der nicht im Hauptthread der Benutzeroberfläche ausgeführt wird, und bei der Ausführung dieses Codes eine unsichtbare Verzögerung auftreten würde. Sie müssen den Code überprüfen, der die Berechtigungsanfrage auslöst.

+0

hey Mann danke für die Antwort, schätzen Sie Ihre Bemühungen. –

Verwandte Themen