首先,正如評論中提到的那樣,在一個while循環中不斷提交警報控制器並不是一個好主意。我相信您的預期功能是在connected
變量爲false時顯示警報。
要做到這一點使用NotificationCenter
迴應如下:
在viewDidLoad
:
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.displayAlert), name: NSNotification.Name(rawValue: "connectionDropped"), object: nil)
添加willSet
財產觀察員connected
:
var connected: Bool! {
willSet {
if newValue == false && oldValue != false {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "connectionDropped"), object: nil)
}
}
}
然後,一旦你設置self.connected = false
,你將運行此方法:
@objc func displayAlert() {
let msg = "Press cancel"
let alert = UIAlertController(title: "Test", message: msg, preferredStyle: .alert)
let action = UIAlertAction(title: "Cancel", style: .default) { (action:UIAlertAction) in
self.connected = true
}
alert.addAction(action)
print ("Hello")
present(alert, animated: true, completion: nil)
}
只要確保在加載視圖層次結構後設置了連接,例如在viewDidAppear
中。
一旦你的觀點做,你可以再取出觀察者:
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "connectionDropped"), object: nil)
}
編輯:
您需要的功能設置有Reachability框架,尤其是與reachabilityChanged
通知。然後,您可以使用我上面概述的類似方法致電displayAlert
;這是在他們的README文檔中記錄的。
你爲什麼老是顯示在一個無限循環報警控制器?認爲這是不合理的。保持邏輯僅在特定條件下顯示警報控制器。 –
一旦你擺脫了while循環,它將不會再被執行。威廉說的是真的,請不要這樣做。 – Marcel
嗯,這只是一個例子,我想要做的是用戶離開應用程序並連接到外部無線網絡,並有一個「再試一次」按鈕來檢查連接是否正常。因此,而不是「連接=真正的」我想有一個類似「如果networkOk {連接=真}如果都不行,再次顯示報警控制器... –