2016-12-01 2 views
0

Я загрузкой некоторой GEODATA с моим сервера и хотят отобразить их бросить аннотации:Обновление аннотаций загружены с HTTP

Alamofire.request("http://localhost:1234/app/data").responseJSON { response in 
    switch response.result { 
    case .success(let value): 
     let json = JSON(value) 
     var annotations = [Station]() 
     for (key, subJson):(String, JSON) in json { 
      let lat: CLLocationDegrees = subJson["latitude"].double! as CLLocationDegrees 
      let long: CLLocationDegrees = subJson["longtitude"].double! as CLLocationDegrees 
      self.annotations += [Station(name: "test", lat: lat, long: long)] 
     } 

     DispatchQueue.main.async { 
      let allAnnotations = self.mapView.annotations 
      self.mapView.removeAnnotations(allAnnotations) 
      self.mapView.addAnnotations(annotations) 
     } 

    case .failure(let error): 
     print(error) 
    } 
} 

и мой Station класса:

class Station: NSObject, MKAnnotation { 
    var identifier = "test" 
    var title: String? 
    var coordinate: CLLocationCoordinate2D 

    init(name:String, lat:CLLocationDegrees, long:CLLocationDegrees) { 
     title = name 
     coordinate = CLLocationCoordinate2DMake(lat, long) 
    } 
} 

Так что я сделал, в основном :

Загрузить данные из удаленной службы и отобразить эти данные в виде аннотаций на MKMapView.

Но: как-то эти аннотации не загружаются на карту, даже я сначала «удаляю», а затем «добавляю» их.

Любые предложения?

+0

При установке точки останова в вашем ответе, все ваши значения JSON печатаются так, как ожидалось? Наносит ли он каждый раздел метода в том порядке, в котором вы ожидаете? –

ответ

0

Вы добавляете свои Station экземпляры в некоторые объекты self.annotations, а не вашу локальную переменную, annotations. Таким образом, annotations локальный var по-прежнему остается только этим пустым массивом.

Очевидно, что вы можете исправить это с помощью ссылки annotations, а не self.annotations:

var annotations = [Station]() 
for (key, subJson): (String, JSON) in json { 
    let lat = ... 
    let long = ... 
    annotations += [Station(name: "test", lat: lat, long: long)] // not `self.annotations` 
} 

Или вы можете использовать map, избегая этой потенциальной путаницы в целом:

let annotations = json.map { key, subJson -> Station in 
    Station(name: "test", lat: subJson["latitude"].double!, long: subJson["longitude"].double!) 
} 
Смежные вопросы