2017-08-01 1 views
1

Ich versuche Touch ID in meine App zu implementieren. Ich bekomme die Touch-ID zu arbeiten, aber es dauert 10 - 15 Sekunden, bevor ich zum nächsten Viewcontroller geschoben werde. Ich habe nach dem Thema gesucht, und es scheint die Lösung ist, dies im Hauptthread auszuführen. Ich habe dann meinen Code geändert, um dies als Hauptthread auszuführen (denke ich), aber das Problem ist immer noch da. Kann jemand sehen, was falsch ist?Touch ID IOS 10 dauert 10 - 15 Sekunden um zu antworten

func logMeIn(){ 

    performSegue(withIdentifier: "notesVC", sender: self) 
} 


@IBAction func loginButton(_ sender: Any) { 

    let context:LAContext = LAContext() 

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil){ 
     context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Log in", reply: { (wasSuccessful, error) in 
      if wasSuccessful{ 
       OperationQueue.main.addOperation({() -> Void in }) 
       self.logMeIn() 
      } 
      else { 
       self.view.backgroundColor = UIColor.red 
      } 
     }) 
    } 
} 
} 
+0

Das ist nicht, wie man etwas auf der Flucht Haupt-Bedroung. Sie müssen 'DispatchQueue.main.async {// schreiben Sie den Code, den Sie hier im Hauptthread ausführen wollen}' '. Oder wenn Sie bei "OperationQueue" bleiben möchten, müssen Sie den gesamten Code, der für den Hauptthread ausgeführt werden muss, ** innerhalb des Abschlusses von "addOperation" verschieben. –

+1

Vielen Dank. Funktioniert gut, wenn ich dies tat: Wenn was war erfolgreich { OperationQueue.main.addOperation ({() -> Void in self.logMeIn()}) –

+0

Froh, es hat funktioniert. Ich habe meinen Kommentar als Antwort gepostet, damit andere das gleiche Problem leichter finden können. Wenn Sie es nützlich fanden, denken Sie bitte daran, die Antwort zu akzeptieren. –

Antwort

1

Das ist nicht, wie Sie etwas auf dem Hauptthread ausführen. Sie müssen den gesamten Code bewegen, die in der Schließung von addOperation auf dem Haupt-Thread ausgeführt werden muss, wie folgt aus:

if wasSuccessful{ 
    OperationQueue.main.addOperation({() -> Void in self.logMeIn()}) 
} 

Oder Sie tun können, auch

DispatchQueue.main.async{ 
    //write the code you want to run on the main thread here 
} 
Verwandte Themen