Arduinoボードを使用してIoTアプリケーションを構築し、APIを呼び出してArduinoボードの更新されたピン値を確認してください。ViewDidアプリケーションがフォアグラウンドになるたびに実行されない
私はAPIからのアップデートを受け取ると、私が受け取っているデータに応じてボタンの色を赤または緑に更新する必要があります。初めてアプリケーションを読み込むと、うまく動作し、viewDidAppear()
が呼び出されます。しかし、私はバックグラウンドに行くと、再びフォアグラウンドに行くときに呼び出されません。私が知っていることは、ビューが表示されるたびに関数内の命令を実行しなければならないが、そうでないように思えるということです。
AppDelagate
applicationDidBecomeActive()
にコードを書き込もうとしましたが、私のビューを更新しようとしていてビューがまだ存在しないため、致命的なエラーが発生しました。ここで がviewDidAppear
に加えて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'インスタンスを作成していません。私は 'default'シングルトンを使用しています。私がやっているのは、その通知センタにオブザーバを追加し、そのオブザーバ(中央ではない)への参照を保存して、そのオブザーバを 'deinit'で削除できるようにすることです。なぜそれを行うのかという点では、オブジェクトが割り当て解除されたときに通知センターに通知の送信を停止するよう伝えることが歴史的に重要でした。おそらく、これは割り当て解除されないルートビューコントローラーですが、コードを任意のコンテキストで使用できるように自分で後でクリーンアップするだけの良い方法です。 – Rob
オブザーバーを追加して削除する例については、['addObserver(forName:object:queue:using:)'](https://developer.apple.com/reference/foundation/notificationcenter/1411723-addobserver)のドキュメントを参照してください。 – Rob