在mapview上加载位置

时间:2016-03-06 22:57:39

标签: ios swift xcode6

我需要在我的地图中添加一个位置,我通过此

获取我的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

2 个答案:

答案 0 :(得分:0)

您应该在ref.observeEventType()的withBlock:闭包内调用loadInitialData()方法,而不是在viewDidLoad()内调用loadInitialData()方法,因为viewDidLoad中的self.coor将为nil。我假设Artwork继承自MKAnnotation,它需要一个有效的坐标来知道它在添加到地图时应该出现的位置。

答案 1 :(得分:0)

我同意ahmed Onawale使用完成块显示注释,你应该回答他。 但如果你没有成功实现完成块(在某些尝试之后永远不会发生),只需创建一个单独的func,以便在地图上显示符号时调用上面创建的函数,当你从服务器获得成功响应数据或位置。