2017-08-01 32 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 
} 
相關問題