Я получаю один и тот же снимок дважды из Firebase при одном уведомлении, и это приводит к тому, что массивы, к которым я добавляю данные, получают вдвое больше записей.Странная часть в том, что это правда только из симулятора.Если я отправляю новое уведомление с iPhone во время работы приложения в симуляторе, я получаю правильный снимок в консоли, но если я публикую новое уведомление из симулятора, я получаю снимок дважды.Вы понимаете, почему я получаю двойные снимки?Вот функция, которую я переписал:
func displayAlerts(setCompletion: @escaping (Bool) -> ()) {
self.mapView.removeAnnotations(mapView.annotations)
MapArray.alertNotificationCoordinatesArray.removeAll()
self.userAlertNotificationArray.removeAll()
print(" MapArray.alertNotificationCoordinatesArray before snapshot is: \(MapArray.alertNotificationCoordinatesArray)")
print(" self.userAlertNotificationArray before snapshot is: \(self.userAlertNotificationArray)")
ref = Database.database().reference()
databaseHandle = ref?.child("Continent").child("Europe").child("Country").child("Italy").child("Region").child("Emilia-Romagna").child("City").child("Bologna").child("Community").child("Alert Notifications").observe(.childAdded, with: { (snapshot) in
print(" snapshot is: \(snapshot)")
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")
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(" MapArray.alertNotificationCoordinatesArray after snapshot is: \(MapArray.alertNotificationCoordinatesArray)")
print(" self.userAlertNotificationArray after snapshot is: \(self.userAlertNotificationArray)")
setCompletion(true)
self.mapView.addAnnotations(self.userAlertNotificationArray)
})
}
И это печать из консоли после одного уведомления только в Firebase:
MapArray.alertNotificationCoordinatesArray at MapViewController viewDidLoad() is[]
self.userAlertNotificationArray before snapshot is: []
alertNotificationCoordinatesArray at notifying is[]
AlertPosted to Firebase
self.userAlertNotificationArray after posting annotation is: []
MapArray.alertNotificationCoordinatesArray after posting annotation is: []
snapshot is: Snap (-LZq2J1n59Ps-yPV3-9j) {
Description = "Lavori in corso";
Id = 0;
Latitude = "44.5075";
Longitude = "11.3514";
}
MapArray.alertNotificationCoordinatesArray after snapshot is: [__C.CLLocationCoordinate2D(latitude: 44.5075, longitude: 11.3514)]
self.userAlertNotificationArray after snapshot is: [<fix_it_Cloud_Biking.UserAlert: 0x600003610180>]
%%%%%%% data retrieving is finished
CLLocationCoordinate2D(latitude: 44.5075, longitude: 11.3514)
MapArray.alertNotificationCoordinatesArray before snapshot is: []
self.userAlertNotificationArray before snapshot is: []
snapshot is: Snap (-LZq2J1n59Ps-yPV3-9j) {
Description = "Lavori in corso";
Id = 0;
Latitude = "44.5075";
Longitude = "11.3514";
}
MapArray.alertNotificationCoordinatesArray after snapshot is: [__C.CLLocationCoordinate2D(latitude: 44.5075, longitude: 11.3514)]
self.userAlertNotificationArray after snapshot is: [<fix_it_Cloud_Biking.UserAlert: 0x600003674960>]
%%%%%%% data retrieving is finished
, как вы можете видеть в `viewDidLoad 'массивпусто, но после уведомления, когда в нем есть 2 записи ... Большое спасибо, ребята.