Im создает приложение IoT с помощью платы Arduino и вызывает API для проверки обновленных значений значков платы Arduino.ViewDidAppear не выполняется каждый раз, когда приложение выходит на передний план
Когда я получаю обновление от API, я должен обновить цвета кнопок до красного или зеленого в соответствии с данными, которые я получаю. Первый раз, когда я загружаю приложение, он работает отлично, и вызывается viewDidAppear()
. Но когда я иду на задний план, то на передний план снова он не называется. То, что я знаю, это то, что при каждом представлении времени он должен запускать инструкции внутри функции, но похоже, что это не так.
Я попытался поместить свой код в AppDelagate
applicationDidBecomeActive()
, но из-за того, что я пытаюсь обновить свои представления, а вид еще нет, он дает мне фатальную ошибку, найденную nil. Вот мои инструкции в 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()
}
}
спасибо Роб первый раз, чтобы использовать эти наблюдатели. Но у меня возник вопрос о создании экземпляра самого NotificationCenter. Я сделал это, не создавая экземпляр, и необходимость вызова deinit. Почему ваш путь лучше, чем использование класса NotificationCenter напрямую? –
Я не создаю экземпляр «NotificationCenter». Я просто использую singleton. Все, что я делаю, это добавить наблюдателя в этот центр уведомлений и сохранить ссылку на этого наблюдателя (а не на центр), чтобы я мог удалить этого наблюдателя в 'deinit'. С точки зрения того, почему вы это делаете, исторически было критично, что когда объект освобождается, он уведомляет центр уведомлений о прекращении отправки уведомлений. Теперь, возможно, это контроллер корневого представления, который не будет освобожден, но это просто хорошая практика для очистки после себя, чтобы код можно было использовать в любом контексте. – Rob
См. Документацию ['addObserver (forName: object: queue: using:)'] (https://developer.apple.com/reference/foundation/notificationcenter/1411723-addobserver), например, добавления наблюдателей и их удаления. – Rob