我需要在我的地图中添加一个位置,我通过此
获取我的firebase存储中的位置坐标 func download(){
var ref = Firebase(url:"https://sweltering-inferno-4285.firebaseio.com/Locations/Shop/1")
ref.childByAppendingPath("Locations/Shop/1")
ref.observeEventType(.Value, withBlock: { snapshot in
println(snapshot.value)
self.shopName = snapshot.value.objectForKey("Shop_Name") as String
self.Location = snapshot.value.objectForKey("Location") as String
self.Long = snapshot.value.objectForKey("Longitude") as String
self.Lat = snapshot.value.objectForKey("Latitude") as String
var x = NSNumberFormatter().numberFromString(self.Lat)?.doubleValue
var y = NSNumberFormatter().numberFromString(self.Long)?.doubleValue
self.coor = CLLocationCoordinate2D(latitude: x!,longitude: y!)
}, withCancelBlock: { error in
println(error.description)
})
}
然后,我从上面的属性创建一个对象“artwork”,并将其添加到一个对象数组
func loadInitialData(){
let artwork = Artwork(title: self.shopName,
locationName: self.Location,
discipline: "Sculpture",
coordinate: coor)
self.artworks.append(artwork)
self.mapView.addAnnotations(self.artworks) }
并形成viewdidload我调用函数download()然后loadinitialdata(), 问题是函数完成并在下载数据之前加载视图并导致空映射。 Ps我相信这是问题,因为我用硬编码的日期测试了上面的代码,它出现在地图上。 我们需要的是如何使函数等待加载数据然后加载地图。 我使用apple的mapkit
答案 0 :(得分:0)
您应该在ref.observeEventType()的withBlock:闭包内调用loadInitialData()方法,而不是在viewDidLoad()内调用loadInitialData()方法,因为viewDidLoad中的self.coor将为nil。我假设Artwork继承自MKAnnotation,它需要一个有效的坐标来知道它在添加到地图时应该出现的位置。
答案 1 :(得分:0)
我同意ahmed Onawale使用完成块显示注释,你应该回答他。 但如果你没有成功实现完成块(在某些尝试之后永远不会发生),只需创建一个单独的func,以便在地图上显示符号时调用上面创建的函数,当你从服务器获得成功响应数据或位置。