gpt4 book ai didi

swift - Firebase 快照未正确解析数据

转载 作者:行者123 更新时间:2023-11-28 10:34:59 24 4
gpt4 key购买 nike

我正在尝试从 Firebase 下载纬度和经度坐标到我的应用程序中,然后使用 Google Maps 和 Google Marker 在 map 上显示标记。我知道地标功能有效,因为当我手动编程坐标时,我可以看到另一个“人”的占位符,所以这不是 Google map 问题。

问题似乎是双重的,第一,来自 Firebase 的数据被“快照”,当您在控制台中执行“po 快照”时,所有用户和数据都在那里。当我启动 for in 循环时,问题就出在这里。当你执行“po driver”时,它只显示 firebase 中的第一个用户,但是当你执行“po driverSnapshot”时,它确实显示与“po snapshot”相同

出于某种原因,Firebase 不允许我正确解析快照。我将快照加载到字典中,我可以看到我的数据,但只能看到第一个用户,而不能看到其他用户。无论如何,我应该能够使用 ["my/example"] 作为字典的下标来提取坐标。当我尝试获取经度和纬度并将它们放入一个数组时,这样我就可以显示多个坐标(“快照”中所有用户的经度和纬度),这是行不通的。

理想情况下我想解决这两个问题。首先摆脱 Unexpectedly found 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"
}
}
}

最佳答案

您正在阅读 /users,然后遍历其下的子节点。因此,这会为您提供每个用户的快照,据我所知应该显示两个节点。

但是这段代码看起来很可疑:

if driver.childSnapshot(forPath: ACCOUNT_PICKUP_MODE_ENABLED).value as? Bool == true {

由于拾取模式状态位于 driver_profile/isPickupModeEnabled 中,您需要从该嵌套属性中读取。所以:

if driver.childSnapshot(forPath: "driver_profile/isPickupModeEnabled").value as? Bool == true {

这同样适用于您尝试从嵌套节点获取的任何属性。

关于swift - Firebase 快照未正确解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com