ViewDidAppear 不会在每次应用程序进入前台时执行

ViewDidAppear not executed every time app comes to foreground

我正在使用 Arduino 板构建物联网应用程序并调用 API 来检查 Arduino 板的更新引脚值。

当我从 API 收到更新时,我必须根据收到的数据将我的按钮颜色更新为红色或绿色。我第一次加载应用程序时它工作正常并且 viewDidAppear() 被调用。但是当我进入后台然后再次进入前台时,它不会被调用。我所知道的是,每次出现视图时,它都必须 运行 函数内部的指令,但似乎并非如此。

我试图将我的代码放在 AppDelagate applicationDidBecomeActive() 中,但是因为我正在尝试更新我的视图,而该视图还不存在,所以我发现致命错误为零。 这是我在 viewDidAppear()

中的说明
    override func viewDidAppear(_ animated: Bool) {

    activityIndicator.startAnimating()

    definingPinModes(pin: [7,6,5,4], mode: 1)

    getAllInputValues(key: key, method: .post) { (status, newValues, msg) in

        if status == 200 {
            //Change button colors according to values in array
            self.changeButtonColors(values: newValues!)

        } else {

            print("Error getting pin values")

            self.alertMessage(title: "Connection Error", message: "Failed retrieving pin values")
            return
        }
        self.activityIndicator.stopAnimating()
    }

}

除了 viewDidAppear 之外,您还可以让视图控制器观察 UIApplication.didBecomeActiveNotification(以前称为 UIApplicationDidBecomeActive):

private var observer: NSObjectProtocol?

override func viewDidLoad() {
    super.viewDidLoad()

    observer = NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { [weak self] notification in
        self?.updateUI()
    }
}

deinit {
    if let observer = observer {
        NotificationCenter.default.removeObserver(observer)
    }
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    updateUI()
}

private func updateUI() {
    // do your UI update stuff here
}