Отличный снимок от публикации в Firebase с iPhone или с симулятора Swift 4 - PullRequest
0 голосов
/ 28 февраля 2019

Я получаю один и тот же снимок дважды из 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 записи ... Большое спасибо, ребята.

...