每次应用程序到达前台

时间:2016-12-13 22:46:12

标签: ios swift viewdidappear

我正在使用Arduino板构建一个IoT应用程序并调用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()
    }

}

1 个答案:

答案 0 :(得分:2)

除了viewDidAppear之外,您还可以让视图控制器观察UIApplicationDidBecomeActive

private var observer: NSObjectProtocol?

override func viewDidLoad() {
    super.viewDidLoad()

    observer = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive, 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
}