我正在尝试根据用户设备是否在线来触发另一个视图控制器中的方法。
该方法是从 ConnectionService.swift 调用的,其设置如下:
protocol ConnectionServiceDelegate: class {
func didChangeStatus()
}
weak var delegate: ConnectionServiceDelegate?
func updateConnectionStatus(_ status: Connectivity.Status) {
switch status {
case .connected, .connectedViaWiFi, .connectedViaCellular:
updateLabelWith(connectionStatus: .connected)
case .notConnected, .connectedViaWiFiWithoutInternet, .connectedViaCellularWithoutInternet:
updateLabelWith(connectionStatus: .disconnected)
}
delegate?.didChangeStatus()
}
我要在其中触发该方法的VC是在viewDidLoad()中设置的:
override func viewDidLoad() {
super.viewDidLoad()
stackView.customPadding(BaseFlightLookupViewController.submitButtonVerticalPadding, after: date)
connectionService = ConnectionService()
connectionService?.delegate = self
}
,然后在扩展名中输入:
extension RetrieveCompletedOrderViewController: ConnectionServiceDelegate {
func didChangeStatus() {
print("Delegate triggered")
}
}
现在我知道委托类正在按正确的行,但是为什么我的RetrieveCompletedOrderViewController中的方法没有被触发?
已编辑:
updateConnectionStatus调用如下:
private func prepareConnectivityListener() {
let connectivityChanged: (Connectivity) -> Void = { [weak self] connectivity in
self?.updateConnectionStatus(connectivity.status)
}
connectivity.whenConnected = connectivityChanged
connectivity.whenDisconnected = connectivityChanged
connectivity.startNotifier(queue: queue)
}
,此方法在这里调用:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
DispatchQueue.main.async { [weak self] in
self?.prepareUI()
}
prepareConnectivityListener()
return true
}