Я пытаюсь загрузить координаты широты и долготы из Firebase в свое приложение и затем отобразить маркер на карте с помощью Google Maps и Google Marker. Я знаю, что функция меток работает, потому что когда я вручную программирую координаты, я вижу заполнитель другого "человека", так что это не проблема карт Google.
Проблема, кажется, двоякая: во-первых, данные из Firebase «защелкиваются», и когда вы делаете «снимок po» в консоли, все есть, все пользователи и данные. Когда я запускаю цикл for, проблема заключается именно в этом. Когда вы делаете «po driver», он показывает ТОЛЬКО первого пользователя в firebase, но когда вы делаете «po driverSnapshot», он показывает то же самое, что и «po snapshot»
По какой-то причине Firebase не позволяет мне правильно проанализировать снимок. Я загружаю снимок в словарь и вижу свои данные, но ТОЛЬКО первый пользователь, а не остальные. независимо от того, я должен быть в состоянии извлечь координаты, используя ["мой / пример"] в качестве индекса для словаря. Когда я пытаюсь получить долготу и широту и поместить их в массив, чтобы я мог отобразить несколько координат (долгота и широта для всех пользователей в «привязке»), это не работает.
В идеале я бы хотел исправить обе проблемы. Сначала избавьтесь от неожиданно найденной ошибки nil, а затем выясните, почему я получаю только одного пользователя, когда у меня 3 с такой же информацией.
Буду признателен за любую помощь в том, что я делаю неправильно. Я сделал обновление pod и запускаю последнюю версию Firebase.
Вот функция, которую я написал:
func loadMarkersFromFB1() {
DataService.instance.REF_USERS.observeSingleEvent(of: .value, with: { (snapshot) in
if let driverSnapshot = snapshot.children.allObjects as? [DataSnapshot] {
for driver in driverSnapshot {
if driver.childSnapshot(forPath: ACCOUNT_PICKUP_MODE_ENABLED).value as? Bool == true {
if let driverDict = driver.value as? Dictionary<String, AnyObject> {
let coordinateArray = driverDict[DRIVERCOORDINATE] as! NSArray **THIS IS WHERE I AM GETTING NIL ERROR**
print(coordinateArray)
let driverCoordinate = CLLocationCoordinate2D(latitude: coordinateArray[0] as! CLLocationDegrees, longitude: coordinateArray[1] as! CLLocationDegrees)
// DispatchQueue.main.async(execute: {
let othermarker = GMSMarker()
othermarker.position = driverCoordinate
// othermarker.userData = snap
othermarker.icon = UIImage(named: "driverAnnotation")
othermarker.map = self.driverMapView
// })
}
} else {
self.showAlert("Test")
}
}
}
})
}
Вот JSON:
"users" : {
"123456789123456789" : {
"driver_profile" : {
"currentlocation" : [ 55.55555, -55.55555555 ],
"isDriverStatusPending" : false,
"isPickupModeEnabled" : true,
"is_userdriver" : true
},
"first_name" : "Carlos",
"last_name" : "Santana",
"mobile_number" : "2125551212",
"provider" : "Firebase"
},
"2398472398472398472398472384" : {
"driver_profile" : {
"currentlocation" : [ 55.55555, -55.55555555 ],
"isDriverStatusPending" : false,
"isPickupModeEnabled" : true,
"is_userdriver" : true
},
"first_name" : "Mick",
"last_name" : "Jagger",
"mobile_number" : "3125551212",
"provider" : "Firebase",
"stripe_id" : "1234354954",
"userAddressInfo" : {
"Home" : {
"City" : "Anywhere",
"State" : "AA",
"Street" : "123 Any Street",
"Zip" : "12345"
}
},
"userPhoto" : "http://www.myphoto.com"
}
}
}