2017-08-01 30 views
1

我试图在我的应用中实现触摸ID。 我得到触摸ID的工作,但它需要10 - 15秒才被推到下一个Viewcontroller。 我已经搜索了关于该主题,似乎解决方案是在主线程中运行此。 然后我改变了我的代码来运行它作为主线程(我认为),但问题仍然存在。 任何人都可以看到最新的错误?触摸ID IOS 10需要10 - 15秒才能做出响应

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

这是不是你运行的东西主线程。你必须做'DispatchQueue.main.async {//写你想在主线程上运行的代码}'。或者,如果你想坚持使用'OperationQueue',你仍然需要在** addOperation'关闭内部移动所有需要在主线程**上运行的代码。 –

+1

非常感谢。当我这样做的时候工作正常:如果wasSuccessful OperationQueue.main.addOperation({() - > self.logMeIn()}中的void) –

+0

很高兴工作。我已将我的评论发布为答案,因此遇到同一问题的其他人可以更轻松地找到答案。如果您发现它有用,请考虑接受答案。 –

回答

1

这不是你在主线程上运行的东西。你需要移动需要addOperation关闭内部的主线程上运行的所有代码,就像这样:

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

或者你也可以做

DispatchQueue.main.async{ 
    //write the code you want to run on the main thread here 
} 
相关问题