Я пытаюсь получить TouchID для проверки подлинности действия в моем приложении. Мне нужно, чтобы показать ImageView в случае успеха.
Вот код, который я имею в ViewController
@IBOutlet weak var notificationImage: UIImageView!
@IBAction func touchBtn(_ sender: UIButton) {
context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
let reason = "Authenticate"
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason ) { success, error in
if success {
print("In closure")
// Move to the main thread because a state update triggers UI changes.
DispatchQueue.main.async{
print("In main thread: Success")
self.notificationImage.isHidden = false
}
} else {
DispatchQueue.main.async(execute: {
print("In main thread: Failed")
})
}
}
}
}
Я могу успешно пройти аутентификацию с помощью TouchID. Это печатает "В закрытии". Но блок в DispatchQueue.main.async не выполняется, и я не могу обновитьtificationImage: UIImageView. Он также ничего не печатает в блоках синхронизации {}.
Я попытался отключить Main Thread Checker и удалить часть DispatchQueue.main.async, но представление иногда обновляется, а иногда нет. Я хочу использовать рекомендованную практику и обновить пользовательский интерфейс из основного потока.
Я нахожусь на Xcode 9 Swift 4 iOS 11.4
Что здесь может быть не так.