Swift Firebase位置到地图
我正在尝试从firebase添加我的位置值,并将它们转换为我应用程序中的注释。这是我目前掌握的代码,它不起作用!寻找帮助的手,感觉我非常接近正确的方向,但我遇到了思维障碍Swift Firebase位置到地图,swift,firebase,annotations,firebase-realtime-database,maps,Swift,Firebase,Annotations,Firebase Realtime Database,Maps,我正在尝试从firebase添加我的位置值,并将它们转换为我应用程序中的注释。这是我目前掌握的代码,它不起作用!寻找帮助的手,感觉我非常接近正确的方向,但我遇到了思维障碍 import UIKit import Firebase import MapKit class ViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! let locationsRef = FIRDatabase.databas
import UIKit
import Firebase
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!
let locationsRef = FIRDatabase.database().reference(withPath: "locations")
override func viewDidLoad() {
super.viewDidLoad()
locationsRef.observe(.value, with: { snapshot in
for item in snapshot.children {
guard let locationData = item as? FIRDataSnapshot else { continue }
let locationValue = locationData.value as! [String: Any]
let location = CLLocationCoordinate2D(latitude: locationValue["lat"] as! Double, longitude: locationValue["lng"] as! Double)
let name = locationValue["name"] as! String
self.addAnnotation(at: location, name: name)
}
})
}
func addAnnotation(at location: CLLocationCoordinate2D, name: String) {
// add that annotation to the map
let annotation = MKPointAnnotation()
annotation.title = location["name"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["lonitude"] as! Double)
mapView.addAnnotation(annotation)
}
}
我的代码正在运行,但我遇到了以下问题:
Could not cast value of type "NSTaggedPointerString' (0x10a708d10) to 'NSNumber' (0x109d10488).
关于这一行代码:
let location = CLLocationCoordinate2D(latitude: locationValue["lat"] as! Double, longitude: locationValue["lng"] as! Double)
我读过一些关于将字符串转换为double的内容,但这行中没有字符串?有人能帮忙吗
更新代码字幕
更新错误
您很可能将坐标存储为Firebase数据库中的
String
对象。这是导致错误的最常见原因。在这种情况下,请尝试以下方法
let lat = Double(locationValue["lat"] as! String)
let lng = Double(locationValue["lng"] as! String)
let location = CLLocationCoordinate2D(latitude: lat, longitude: lng)
更新
数据库中的某些位置项存储为字符串
对象,另一些存储为浮点数。你应该有一个一致的结构(即所有的都是字符串或双精度)。
无论哪种方式,这里都有一个解决您错误的方法:
var location: CLLocationCoordinate2D!
if let lat = locationValue["lat"] as? String {
// stored as String
let lng = Double(locationValue["lng"] as! String)!
location = CLLocationCoordinate2D(latitude: Double(lat)!, longitude: lng)
}
else {
// stored as a floating point number
let lat = locationValue["lat"] as! Double
let lng = locationValue["lng"] as! Double
location = CLLocationCoordinate2D(latitude: lat, longitude: lng)
}
编辑2
只需在此处删除让
请解释“不工作”,并提供一个JSON数据示例。您在这里工作太辛苦了-在您的方法
addAnnotation
中,您已经没有字典了,您已经有了位置和名称-只要使用这些变量,就可以为我指出正确的方向,告诉我如何根据字幕显示和隐藏注释。我想我需要创建一个表视图,其中包含三个选项“all”、“skateparks”和“street Skilling”。当我单击某个视图时,只显示那些注释