Есть кое-что, что мне не совсем понятно в отношении чтения из базы данных Firebase.Когда я помещаю наблюдателя в детство, он будет просто загружать новые сообщения как добавленные, сохраняя локально сохраненный файл, или каждый раз, когда я запускаю свое приложение, он будет загружать всю ветку?Со страницы руководства Firebase я читаю Every client connected to a Firebase database maintains its own internal version of any active data. When data is written, it's written to this local version first.
Я спрашиваю после прочтения случая запуска, который суммировал счет в 30 тысяч за ночь, и я был бы рад избежать повторения этого сам.Поскольку мое приложение просыпается в запрограммированное время для выполнения проверки, было бы очень дорого, если бы я каждый раз загружал всю базу данных.Я отключил слушателей, когда выходил из приложения, чтобы пропускная способность трубки и батарея были удобными, и я не слушал новые сообщения, когда они не используются.Вот код для задействованных функций.
Рединг:
func displayAlerts() {
ref = Database.database().reference()
databaseHandle = ref?.child("Community").child("Alert Notifications").observe(.childAdded, with: { (snapshot) in
// defer { self.dummyFunctionToFoolFirebaseObservers() }
guard let data = snapshot.value as? [String:String] else { return }
guard let firebaseKey = snapshot.key as? String else { return }
// let date = data!["Date"]
// let time = data!["Time"]
let dataLatitude = data["Latitude"]!
let dataLongitude = data["Longitude"]!
let type = data["Description"]!
let id = Int(data["Id"]!)
let doubledLatitude = Double(dataLatitude)
let doubledLongitude = Double(dataLongitude)
let recombinedCoordinate = CLLocationCoordinate2D(latitude: doubledLatitude!, longitude: doubledLongitude!)
print("Firebase alerts posts retrieved")
// print("Longitude Actual DataKey is \(String(describing: firebaseKey))")
// print("fir long \((snapshot.value!, snapshot.key))")
let userAlertAnnotation = UserAlert(type: type, coordinate: recombinedCoordinate, firebaseKey: firebaseKey, title: type,id: id!)
self.userAlertNotificationArray.append(userAlertAnnotation) // array of notifications coming from Firebase
print("userAlertNotificationArray after retrieving from Firebase is : \(self.userAlertNotificationArray)")
MapArray.alertNotificationCoordinatesArray.append(recombinedCoordinate) // array for checkig alerts on route
print("alertNotificationCoordinatesArray after retrieving from Firebase is : \(MapArray.alertNotificationCoordinatesArray)")
self.mapView.addAnnotation(userAlertAnnotation)
})
}
и отсоединение:
override func viewDidDisappear(_ animated: Bool) {
ref!.removeObserver(withHandle:databaseHandle!)
}
я должен использовать removeObserverWithHandle
или removeAllObservers
?