ОБЗОР
Существует NavigationController, который представляет UIAlertView при подключении к интерфейсу BLE.
Расширение для представления UIAlertView
private extension UIViewController {
final func showAlert(title: String, msg: String, timeout: Double?, presentActivity: (() -> Void)?, timeoutActivity: (() -> Void)?) {
DispatchQueue.main.async {
let alert: UIAlertController = UIAlertController(title: title, message: msg, preferredStyle: .alert)
self.present(alert, animated: true, completion: presentActivity)
if timeout != nil {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + timeout!) {
//My suggestion
if(self.presentedViewController != nil) {
self.dismiss(animated: true, completion: timeoutActivity)
}
}
}
}
}
}
В NavigationController есть функция делегата, которая сообщает NavigationController, что процесс соединения выполняется.В этой функции вызывается функция showAlert.
Вызовите showAlert
showAlert(title: "BLE", msg: "Wait", timeout: 10, presentActivity: self.checkConnection, timeoutActivity: cancelConnection)
Чтобы проверить, установлено ли соединение, существует следующая функция presentActivity.
Проверьте соединение и отклоните предупреждение, если соединение установлено
private final func checkConnection() {
self.isPresented = true
if self.isConnected == true {
self.dismiss(animated: true, completion: self.connectionEstablished)
}
}
Если время ожидания истекло, UIAlertView должен исчезнуть независимо от каких-либо состояний и заставить интерфейс BLE отключить периферийное устройство..
Отмена соединения
private final func cancelConnection() {
self.bleTransceiver.disconnectPeripheral()
self.resetDisconnectionFlags()
}
ВОПРОС
Следующая часть добавочного номера всегда вызывается после истечения времени ожиданияexpired.
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + timeout!) {
self.dismiss(animated: true, completion: timeoutActivity)
}
В iOS 12 функция завершения timeoutActivity: cancelConnection
НЕ вызывается, если self.dismiss(animated: true, completion: self.connectionEstablished)
вызывается раньше.
В iOS 13 функция завершения timeoutActivity: cancelConnection
вызывается , даже если self.dismiss(animated: true, completion: self.connectionEstablished)
вызывается раньше.
Может кто-нибудь сказать мне, что изменилось с iOS 12 на iOS 13 в этом контексте?