2016-03-06 6 views
-1

мне нужно, чтобы добавить место на моей карте, я получаю местоположения координаты моего firebase хранения этойместа погрузки на MapView

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) 
    }) 
} 

я затем создать объект «произведения искусства» из атрибутов выше и добавить это массив объектов

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 я вызвать функции загрузки() затем loadinitialdata(), проблема в том, что функция заканчивается и вид загружается до загрузки данных, что приводит к пустая карта. Ps Я уверен, что проблема в том, что я проверил код выше с жестко запрограммированной датой и появился на карте. Что нужно, так это то, как заставить функцию ждать загрузки данных, а затем загрузить карту. i использовать mapkit apple

+0

Вам необходимо создать аннотацию и добавить ее к карте в блоке завершения (закрытие 'withBlock:'). – Paulw11

+0

вы можете уточнить? –

+0

жаль, что я новичок в быстрой –

ответ

0

Вы должны вызвать метод loadInitialData() внутри withBlock: закрытие ref.observeEventType(), а не внутри viewDidLoad(), потому что self.coor будет nil в viewDidLoad. Я предполагаю, что Artwork наследует MKAnnotation, которому нужна действительная координата, чтобы знать, какую позицию она должна появиться при добавлении на карту.

0

Я слишком согласен с ahmed Onawale, чтобы использовать блок завершения, чтобы показать аннотацию, которую вы должны пойти с его ответом. , но если вы не получите успеха в реализации блока завершения (который никогда не случится после определенных попыток), просто создайте один отдельный func, чтобы показать обозначение на карте, вызовите созданную выше функцию, когда вы получили ответ от сервера с данными или местоположением ,